Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

97b3cca999b52cb5296675ac0a5c12cd?s=47 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

97b3cca999b52cb5296675ac0a5c12cd?s=128

emi

April 07, 2022
Tweet

More Decks by emi

Other Decks in Technology

Transcript

  1. CloudShellで スイッチロール 2022/4/7(木)JAWS-UG CLI専門支部 #253R EC2基礎 (VPC)

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

    NW機器設定 • オンプレサーバ構築(ほぼWindows) • Azureインフラ環境構築 • 2022/2~株式会社サーバーワークス • AWSリフト済システムの改善など お手伝いしています
  3. おひとりさまOrganizations始めました! • https://speakerdeck.com/opelab/20210826-jawsug-asa- organizations-region?slide=4

  4. スイッチロールのおさらい

  5. マルチアカウントでシステム運用 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
  6. マルチアカウントでシステム運用 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
  7. マルチアカウントでシステム運用 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
  8. スイッチロールとは Account A Account B AccountB_role スイッチ元アカウント アカウントAのユーザは、 アカウントBに スイッチロールしたい。

    アカウントAのユーザは、 アカウントBに作成された ロールを引き受ける。 スイッチ元先アカウント AccountA_user
  9. 参照 スイッチロールとは Account A Account B スイッチ元アカウント スイッチ元先アカウント アカウントBのロールを引き受けた アカウントAのユーザは、アカウントB内の

    リソースの操作が可能になる。 AccountB_role AccountA_user
  10. スイッチする前の権限確認 Account A Account B ユーザーベースのポリシー "Action": "sts:AssumeRole“ “Resource”:今回はAccountB_role ユーザーベースのポリシー

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

    } } スイッチする前の権限確認 スイッチ元アカウントAのユーザ AccountA_user
  12. { "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
  13. CloudShell でスイッチロール

  14. 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 ~]$ ① ② ③
  15. 環境変数を設定する準備 • 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)
  16. 環境変数を設定する ①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')
  17. スイッチしたロールの情報を確認する [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 を実行し、スイッチした現在のロール の情報を確認する
  18. スイッチ先のアカウントリソースを 見てみる • この状態で 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 バケット 一覧が見えています
  19. スイッチバックする • スイッチバックは以下のコマンドを入力し、環境変数を削除す る。(もしくは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 ~]$
  20. 注意 • 最大セッション時間に注意!

  21. 注意 • 最大セッション時間に注意!

  22. 参考 • 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