Assume Role を実行するために必要なものの準備編 - ジャコ Lab

ジャコ Lab

プログラミング関連のメモ帳的ブログです

Assume Role を実行するために必要なものの準備編

zako-lab929.hatenablog.com

さて、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
ばっちり!

まとめ

日々、知ってる前提で話が進んでいくので理解を追い付くのに必死です...