さて、LINE Notify は置いといて、上記記事において Assume Role を実施するために必要なものの準備編です。
Assume Role とは?
まず Assume には、引き受ける や 肩代わりする , 引き継ぐ などの意味があるようです。つまり、ユーザーに成り代わって、Role を肩代わりする ということでしょう。
前提
AWS アカウント が開通していること
これはもう大前提です。
必要なもの
- Assume Role を実行する IAM ユーザー
- IAM ユーザー に代わり、権限を担う IAM ロール
IAM ユーザーの作成
arn:aws:iam::000000000000:user/practice
(作成方法は省略)
ポリシーの設定
今回はインラインポリシーで設定します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::000000000000:role/AssumeRole_S3FullAccess" } ] }
Resource
に設定したのは 後述で作成した IAM ロールの ARN です。
IAM ロールの作成
arn:aws:iam::000000000000:role/AssumeRole_S3FullAccess
(作成方法は省略)
ポリシーの設定
このロールには S3FullAccess を付けておきます。
信頼ポリシーの設定
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::000000000000:user/practice" }, "Action": "sts:AssumeRole" } ] }
Principal.AWS
に設定したのは 前述で作成した IAM ユーザーの ARN です。
aws cli で試す!
アクセスキーは別途発行しておいてください!
AssumeRole 実行前の確認
- 期待値:
aws s3 ls
ができないこと
# アクセスキー設定 $ export AWS_ACCESS_KEY_ID=xxxxx $ export AWS_SECRET_ACCESS_KEY=yyyyy # Credentials の確認 $ aws sts get-caller-identity { "UserId": "AIDA3FCNDEDTADWTDWZ1Z", "Account": "000000000000", "Arn": "arn:aws:iam::000000000000:user/practice" } # 本題の実行 $ aws s3 ls An error occurred (AccessDenied) when calling the ListBuckets operation: User: arn:aws:iam::000000000000:user/practice is not authorized to perform: s3:ListAllMyBuckets because no identity-based policy allows the s3:ListAllMyBuckets action
AssumeRole 実行
$ aws sts assume-role --role-arn arn:aws:iam::000000000000:role/AssumeRole_S3FullAccess --role-session-name practice-user --query 'Credentials' { "AccessKeyId": "xxxxx", "SecretAccessKey": "yyyyy", "SessionToken": "zzzzz", "Expiration": "2024-10-10T14:32:13Z" }
AssumeRole 実行後の確認
- 期待値:
aws s3 ls
ができること
# AssumeRole で得られたアクセスキーの設定 $ export AWS_ACCESS_KEY_ID=xxxxx $ export AWS_SECRET_ACCESS_KEY=yyyyy $ export AWS_SESSION_TOKEN=zzzzz # Credentials の確認 $ aws sts get-caller-identity { "UserId": "AROA3FCNDEZTVZXAOOKNZ:practice-user", "Account": "000000000000", "Arn": "arn:aws:sts::000000000000:assumed-role/AssumeRole_S3FullAccess/practice-user" } # 本題の実行 $ aws s3 ls 2024-10-09 12:25:24 aaaaa 2024-10-09 12:26:31 bbbbb
ばっちり!
まとめ
日々、知ってる前提で話が進んでいくので理解を追い付くのに必死です...