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

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

    View Slide

  2. 自己紹介
    • 名前
    • emi(木谷映見)
    • 業務
    • 2016/4~SIer勤務5年
    • NW機器設定
    • オンプレサーバ構築(ほぼWindows)
    • Azureインフラ環境構築
    • 2022/2~株式会社サーバーワークス
    • AWSリフト済システムの改善など
    お手伝いしています

    View Slide

  3. おひとりさまOrganizations始めました!
    • https://speakerdeck.com/opelab/20210826-jawsug-asa-
    organizations-region?slide=4

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  9. 参照
    スイッチロールとは
    Account A Account B
    スイッチ元アカウント スイッチ元先アカウント
    アカウントBのロールを引き受けた
    アカウントAのユーザは、アカウントB内の
    リソースの操作が可能になる。
    AccountB_role
    AccountA_user

    View Slide

  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

    View Slide

  11. {
    "Version": "2012-10-17",
    "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource":"arn:aws:iam::アカウントBのアカウントID:role/AccountB_role"
    }
    }
    スイッチする前の権限確認
    スイッチ元アカウントAのユーザ
    AccountA_user

    View Slide

  12. {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "arn:aws:iam:::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

    View Slide

  13. CloudShell でスイッチロール

    View Slide

  14. aws sts assume-role でスイッチロールに
    必要な情報を確認する
    [[email protected] ~]$ aws sts assume-role ¥
    > --role-arn "arn:aws:iam:::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:::assumed-role/AccountB_role/session-name"
    }
    }
    [[email protected] ~]$



    View Slide

  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)

    View Slide

  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')

    View Slide

  17. スイッチしたロールの情報を確認する
    [[email protected] ~]$ aws sts get-caller-identity
    {
    "UserId": “xxxxxxxxxxxxxxxxxxxxx:session-name",
    "Account": "",
    "Arn": "arn:aws:sts:::assumed-role/AccountB_role/session-name"
    }
    [[email protected] ~]$
    • aws sts get-caller-identity を実行し、スイッチした現在のロール
    の情報を確認する

    View Slide

  18. スイッチ先のアカウントリソースを
    見てみる
    • この状態で AWS CLI コマンドを普通に実行すれば、
    スイッチ先(アカウントB)のリソースを操作することができる
    [[email protected] ~]$ aws s3 ls
    2022-03-26 09:36:37 emiki-bucket1
    2022-03-26 09:37:07 emiki-bucket2
    [[email protected] ~]$
    アカウントBのS3 バケット
    一覧が見えています

    View Slide

  19. スイッチバックする
    • スイッチバックは以下のコマンドを入力し、環境変数を削除す
    る。(もしくはctr+dでセッションを切断する)
    unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
    AWS_SESSION_TOKEN
    • aws sts get-caller-identity を実行すると、アカウントAのユーザに
    スイッチバックしているしていることが確認できる。
    [[email protected] ~]$ aws sts get-caller-identity
    {
    "UserId": "AxxxxxxxxxxxxxxxxxxH",
    "Account": "アカウントAのアカウントID",
    "Arn": "arn:aws:iam::アカウントAのアカウントID:user/AccountA_user"
    }
    [[email protected] ~]$

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide