STS認証を利用してS3のファイルを取得する
やりたいこと
アカウントAのS3にアカウントBがSTSを利用してファイルを取得したい
流れ
アカウントAがポリシーとロール作成
アカウントA(11111111111)、アカウントB(222222222222)とする
ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::mybucket/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::mybucket" } ] }
ロール
222222222222
の部分に事前にアカウントBに聞いたAWSアカウント番号を設定
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root" }, "Action": "sts:AssumeRole" } ] }
ここまで作業したらアカウントBへロール名を伝える
ARNと表示されているものをそのまま伝えればよい
アカウントAのAWS番号が11111111111
で、作成したロール名がaccountarole
の場合は以下になる
arn:aws:iam::11111111111:role/accountarole
アカウントBでユーザー作成、疎通確認
ユーザーにアタッチするポリシーを作成する
ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::11111111111:role/accountarole" } ] }
作成したポリシーをつけるユーザーを作成する
作成後、アクセスキーを発行する
疎通確認
ここまできたらS3へアクセスできるので確認する
まずはC:\Users\xxxxx\.aws
にあるconfig、credentialsを編集する
- credentials
[hogehoge] aws_access_key_id = 作成したユーザーのアクセスキー aws_secret_access_key = 作成したユーザーのシークレットアクセスキー
- config
[profile fugafuga] role_arn = arn:aws:iam::11111111111:role/accountarole source_profile = hogehoge
設定後、以下でアクセスできる
aws s3 ls s3://mybucket/ --profile fugafuga
補足
[profile fugafuga]
を設定せず、tokenを取得するケースも多いと思われる
その場合、まずは以下を実行する
aws sts assume-role --role-arn "arn:aws:iam::11111111111:role/accountarole" --role-session-name sts --profile hogehoge
レスポンスとして、AccessKeyId、SecretAccessKey、SessionTokenが取得できるので、それをcredentialsに設定する
[hoge-tmp] aws_access_key_id = 取得したAccessKeyId aws_secret_access_key = 取得したSecretAccessKey aws_session_token = 取得したSessionToken
設定後は同様に取得可能
aws s3 ls s3://mybucket/ --profile hoge-tmp
有効期限があるため、この手順では毎回credentialsを更新するのが手間になる