S3 接続で STS AssumeRole を使う必要があったのでメモ
まずは EC2 にアタッチする IAM Role の Trust Relationships (信頼関係) タブの中のエントリーを修正する。
下記のPrincipal.AWS の値のところには ARN をセットする。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<ACCOUNT-HERE>:role/<ROLE-HERE>" }, "Action": "sts:AssumeRole" } ] }
次は EC2.
EC2 に ssh ログインして awscli で AssumeRole してから環境変数に値をセットする。
–role-arn には上記と同じく EC2 にアタッチする Role の ARN を渡す。
jq コマンド使って JSON パースすれば楽。
#!/bin/bash OUTPUT=$(aws sts assume-role --role-arn "arn:aws:iam::<ACCOUNT-HERE>:role/<ROLE-HERE>" --role-session-name AWSCLI-Session) export AWS_ACCESS_KEY_ID=$(echo $OUTPUT | jq -r '.Credentials.AccessKeyId') export AWS_SECRET_ACCESS_KEY=$(echo $OUTPUT | jq -r '.Credentials.SecretAccessKey') export AWS_SESSION_TOKEN=$(echo $OUTPUT | jq -r '.Credentials.SessionToken')
S3 にアクセス出来るか確認
aws s3api list-objects --bucket your-bucket-name --region ap-northeast-1