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