■ はじめに
https://dk521123.hatenablog.com/entry/2017/02/26/231046
の続き。 今回は、クロスアカウント周辺の知識 について ちょこちょこ、まとめる。
目次
【1】クロスアカウント 【2】STS (Security Token Service) 1)sts:AssumeRole 2)AWS CLIコマンド 【3】外部ID(External ID) 1)イメージ 【4】別アカウントを受け入れる例 1)シナリオ 2)手順
【1】クロスアカウント
* クロスアカウントにより、別アカウントのリソースを操作できる
https://dev.classmethod.jp/articles/signin-with-cross-account-access/
【2】STS (Security Token Service)
* 一時的な認証情報を発行
1)sts:AssumeRole
* STS (Security Token Service) を通じて、 IAM ロールと同じ権限を一時的に得る => 「sts (一時的な認証情報を発行)」「AssumeRole」と分解して考えるといいかも
https://youtu.be/LbZj68v4k8I?t=216
AssumeRole
* IAM ロールに設定された権限を引き受けることができる cf. Assume (アシューム) = 引き受ける
2)AWS CLIコマンド
* 以下の関連記事を参照のこと
AWS CLI ~ aws sts ~
https://dk521123.hatenablog.com/entry/2023/04/13/000000
【3】外部ID(External ID)
* 外部アカウントからクロスアカウントするために利用するID => AssumeRoleで「許可する側」から「許可される側」 に割り振る一意のID
1)イメージ
[許可される側] ---------------> [許可する側] Role + 外部ID
CloudFormation での 外部IDを利用したロールの作成
Resources: DemoRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: AWS: arn:aws:iam::123456780123:root Action: sts:AssumeRole # 外部ID「ExternalId123」と一致したらAssumeRoleする Condition: StringEquals: sts:ExternalId: "ExternalId123"
【4】別アカウントを受け入れる例
* 以下の公式サイトを参考に整理する
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html
1)シナリオ
自分の会社(許可する側。My Com)のアカウントが、 第三者企業(許可される側。Example Corp) のアカウントを 受け入れる場合
2)手順
[1] 許可される側 (Example Corp) は、 アクセスする AWS アカウント番号および 外部IDを作成し、許可する側(My Com)に提供 [2] 許可する側(My Com)は、 許可される側 (Example Corp) に付与する IAM ロールを作成 => 上記「1)イメージ」のようにCondition 要素を追加し 外部ID に一致するようにする [3] [2]のIAMロールに対するポリシーに、 どのAWSサービスに何を許可するかを設定する => 【例】S3バケットに対して、ファイルのReadのみを許可 [4] [2]のロールの Amazon リソースネーム(ARN)を 許可される側 (Example Corp) に提供 [5] 許可される側 (Example Corp) が許可する側(My Com)の AWS環境にアクセスする場合、sts:AssumeRole API を呼び出す => 一時的なセキュリティ認証情報(Credentials)がレスポンス として返ってくるので、それらを使ってアクセスする
$ aws sts assume-role \ --role-arn arn:aws:iam::1234567890123:role/externalid-demo \ ([4]のARN) --role-session-name demo-session \ (セッション名(なんでもいい)) --external-id abcd12345678 (外部ID) { "Credentials": { "AccessKeyId": "XXXXXXXXXXXX", "SecretAccessKey": "XXXXXXXXXXXX", "SessionToken": "XXXXXXXXXXXX", "Expiration": "2022-05-23T03:31:44Z" }, "AssumedRoleUser": { "AssumedRoleId": "XXXXXXXXXXXX:demo-session", "Arn": "arn:aws:sts::XXXXXXXXXXXX:assumed-role/externalid-demo/demo-session" } }
参考文献
https://dev.classmethod.jp/articles/iam-role-passrole-assumerole/
関連記事
IAM ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/02/26/231046
IAM ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2022/07/03/000000
IAM ~ IAM Policy ~
https://dk521123.hatenablog.com/entry/2020/09/30/133123
IAM ~ 別AWSアカウントのS3にファイルアップロード ~
https://dk521123.hatenablog.com/entry/2024/03/08/003841
IAM ~ Service-Linked Roles ~
https://dk521123.hatenablog.com/entry/2023/01/22/000000
クロスアカウントでのS3アクセスに関するトラブル
https://dk521123.hatenablog.com/entry/2022/06/30/193834