EC2 IAMロールの作成と適用をCLIから行う
AWSコンソールからであれば簡単なんですが、CLIからだとインスタンスプロファイル(EC2 IAMロール)を作るのにロールの作成から必要なので若干面倒です。
ここでは前提として、複数のインスタンスに対してそれぞれ違うロール(ポリシーは同一)を適用します。
表にすると次のような感じです。
| インスタンスID | ロール名 / インスタンスプロファイル名 | ポリシーARN | | instanceid1 | rolename1 | arn:aws:iam::aws:policy/service-role/servicerole | | instanceid2 | rolename2 | arn:aws:iam::aws:policy/service-role/servicerole |
手順
Assume-roleを準備
cat << _EOF > Trust-Policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
_EOFインスタンスロール作成とロールのアタッチ
INSTANCE_ROLE_NAMES=(
rolename1
rolename2
)
for INSTANCE_ROLE_NAME in ${INSTANCE_ROLE_NAMES[@]};
do
# ロール作成
aws iam create-role --role-name $INSTANCE_ROLE_NAME --assume-role-policy-document file://Trust-Policy.json
# ロールにポリシーをアタッチ
aws iam attach-role-policy --role-name $INSTANCE_ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/servicerole
# インスタンスプロファイル作成
aws iam create-instance-profile --instance-profile-name $INSTANCE_ROLE_NAME
# インスタンスプロファイルにロールをアタッチ
aws iam add-role-to-instance-profile --role-name $INSTANCE_ROLE_NAME --instance-profile-name $INSTANCE_ROLE_NAME
doneインスタンスにインスタンスロールのアタッチ
※停止中インスタンスの場合、起動しないと表示上反映されない
aws ec2 associate-iam-instance-profile --instance-id instanceid1 --iam-instance-profile Name=rolename1
aws ec2 associate-iam-instance-profile --instance-id instanceid2 --iam-instance-profile Name=rolename2