Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

20220407_CloudShellでスイッチロール/cloudshell_switchrole

emi
April 07, 2022

 20220407_CloudShellでスイッチロール/cloudshell_switchrole

2022/4/7(木) JAWS-UG CLI専門支部 #253R EC2基礎 (VPC)でのLTスライドです。
(参考)
AWS CLIでスイッチロール
https://qiita.com/emiki/items/2f45f080d77c31613ec5
ヤマムギ - AWS CLIを使用したIAMロールの引き受けコマンドのメモ
https://www.yamamanx.com/aws-cli-iamrole-assumerole/
AWS CLI を使用して IAM ロールを引き受けるにはどうすればよいですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-assume-role-cli/
AWS Command Line Interface バージョン 2 のユーザーガイド - 設定の基本
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
AWS CloudShell ユーザーガイド
https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/limits.html

emi

April 07, 2022
Tweet

More Decks by emi

Other Decks in Technology

Transcript

  1. 自己紹介 • 名前 • emi(木谷映見) • 業務 • 2016/4~SIer勤務5年 •

    NW機器設定 • オンプレサーバ構築(ほぼWindows) • Azureインフラ環境構築 • 2022/2~株式会社サーバーワークス • AWSリフト済システムの改善など お手伝いしています
  2. マルチアカウントでシステム運用 AWS Account AWS Account AWS Account AWS Account AWS

    Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account
  3. マルチアカウントでシステム運用 AWS Account AWS Account AWS Account AWS Account AWS

    Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account
  4. マルチアカウントでシステム運用 AWS Account AWS Account AWS Account AWS Account AWS

    Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account AWS Account
  5. スイッチロールとは Account A Account B AccountB_role スイッチ元アカウント アカウントAのユーザは、 アカウントBに スイッチロールしたい。

    アカウントAのユーザは、 アカウントBに作成された ロールを引き受ける。 スイッチ元先アカウント AccountA_user
  6. スイッチする前の権限確認 Account A Account B ユーザーベースのポリシー "Action": "sts:AssumeRole“ “Resource”:今回はAccountB_role ユーザーベースのポリシー

    "Action": roleができること (今回はReadOnlyAccess) 信頼ポリシー "Action": "sts:AssumeRole", "Principal": roleをかぶっていいよ、 と信頼している相手 (今回はAccountA_user) スイッチ元アカウント スイッチ元先アカウント AccountB_role AccountA_user
  7. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {

    "AWS": "arn:aws:iam::<スイッチ元(アカウントA)AWSアカウントID>:user/AccountA_user" }, "Action": "sts:AssumeRole", "Condition": {} } ] } スイッチする前の権限確認 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "a4b:Get*", "a4b:List*", : : "xray:BatchGet*", "xray:Get*" ], "Resource": "*" } ] } AWS管理のReadOnlyAccess スイッチ先アカウントBのロール AccountB_role
  8. aws sts assume-role でスイッチロールに 必要な情報を確認する [cloudshell-user@ip-10-0-162-90 ~]$ aws sts assume-role

    ¥ > --role-arn "arn:aws:iam::<AccountBのアカウントID>:role/AccountB_role" ¥ > --role-session-name session-name { "Credentials": { "AccessKeyId": "xxxxxxxxxxxxxxxxxxxx", "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "SessionToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Expiration": "2022-04-02T17:36:16+00:00" }, "AssumedRoleUser": { "AssumedRoleId": "xxxxxxxxxxxxxxxxxxxxx: session-name ", "Arn": "arn:aws:sts::<AccountBのアカウントID>:assumed-role/AccountB_role/session-name" } } [cloudshell-user@ip-10-0-162-90 ~]$ ① ② ③
  9. 環境変数を設定する準備 • aws sts assume-role の表示結果を変数role_credentialsに格納する $ role_credentials=$(aws sts assume-role

    ¥ --role-arn "arn:aws:iam::アカウントBのアカウントID:role/AccountB_role" ¥ --role-session-name session-name)
  10. 環境変数を設定する ①AccountB_roleのアクセスキーを環境変数AWS_ACCESS_KEY_IDに格納する $ export AWS_ACCESS_KEY_ID=$(echo $role_credentials | ¥ jq -r

    '.Credentials.AccessKeyId') ②AccountB_roleのシークレットアクセスキーを環境変数 AWS_SECRET_ACCESS_KEYに格納する $ export AWS_SECRET_ACCESS_KEY=$(echo $role_credentials | ¥ jq -r '.Credentials.SecretAccessKey') ③セッショントークンを環境変数AWS_SESSION_TOKENに格納する $ export AWS_SESSION_TOKEN=$(echo $role_credentials | ¥ jq -r '.Credentials.SessionToken')
  11. スイッチしたロールの情報を確認する [cloudshell-user@ip-10-0-132-110 ~]$ aws sts get-caller-identity { "UserId": “xxxxxxxxxxxxxxxxxxxxx:session-name", "Account":

    "<AccountBのアカウントID>", "Arn": "arn:aws:sts::<AccountBのアカウントID>:assumed-role/AccountB_role/session-name" } [cloudshell-user@ip-10-0-132-110 ~]$ • aws sts get-caller-identity を実行し、スイッチした現在のロール の情報を確認する
  12. スイッチ先のアカウントリソースを 見てみる • この状態で AWS CLI コマンドを普通に実行すれば、 スイッチ先(アカウントB)のリソースを操作することができる [cloudshell-user@ip-10-0-132-110 ~]$

    aws s3 ls 2022-03-26 09:36:37 emiki-bucket1 2022-03-26 09:37:07 emiki-bucket2 [cloudshell-user@ip-10-0-132-110 ~]$ アカウントBのS3 バケット 一覧が見えています
  13. スイッチバックする • スイッチバックは以下のコマンドを入力し、環境変数を削除す る。(もしくはctr+dでセッションを切断する) unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN • aws

    sts get-caller-identity を実行すると、アカウントAのユーザに スイッチバックしているしていることが確認できる。 [cloudshell-user@ip-10-0-47-62 ~]$ aws sts get-caller-identity { "UserId": "AxxxxxxxxxxxxxxxxxxH", "Account": "アカウントAのアカウントID", "Arn": "arn:aws:iam::アカウントAのアカウントID:user/AccountA_user" } [cloudshell-user@ip-10-0-47-62 ~]$
  14. 参考 • AWS CLIでスイッチロール • https://qiita.com/emiki/items/2f45f080d77c31613ec5 • ヤマムギ - AWS

    CLIを使用したIAMロールの引き受けコマンドのメモ • https://www.yamamanx.com/aws-cli-iamrole-assumerole/ • AWS CLI を使用して IAM ロールを引き受けるにはどうすればよいですか? • https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-assume-role-cli/ • AWS Command Line Interface バージョン 2 のユーザーガイド - 設定の基本 • https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html • AWS CloudShell ユーザーガイド • https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/limits.html