AWS CLI で IAM ロールを作成する
概要
IAM ロールの作成は「IAM ロールの作成」「IAM ロールにポリシーをアタッチ」の 2ステップで行う。
IAM ロールを作成 → 削除 までの流れを実際に行えるコマンドを記載した。
IAM ロールを作成
IAM ロールを作成する際には「ロールの名前」と「ロールを引き受ける対象」を指定する。
「ロールを引き受ける対象」は、IAM ポリシーと同様のフォーマットで指定する。
今回は、「sample-role」という名前で、「AWS Lambda」で使用できるロールを作成する。
以下のコマンドで、IAM ロールが作成される。
aws iam create-role \
--role-name sample-role \
--assume-role-policy-document \
'{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}'
作成した IAM ロールは、Lambda の画面では選択できるようになっているが、他のサービスの画面では選択できないことが確認できる。
IAM ロールにポリシーをアタッチ
作成したロールには、まだ何もポリシーがアタッチされていないためポリシーをアタッチする。
既存ポリシーをアタッチする場合
以下のコマンドで、作成したロールに AWS管理ポリシー「AmazonS3FullAccess」がアタッチされる。
aws iam attach-role-policy \
--role-name sample-role \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
ポリシーを作成する場合
要件を満たすポリシーがない場合は、ポリシーを作成してロールにアタッチする。
ポリシーを作成する選択肢は「インラインポリシー」と「カスタマー管理ポリシー」の 2択。
インラインポリシー
インラインポリシーは、対象のロールでのみ使用できるポリシー。
インラインポリシーの場合は、以下のコマンド 1つでポリシーの作成(または更新)・アタッチが行われる。
aws iam put-role-policy \
--role-name sample-role \
--policy-name sample-inline-policy \
--policy-document \
'{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::sample_bucket"
}
]
}'
カスタマー管理ポリシー
カスタマー管理ポリシーは、複数のロールで使い回すことができるポリシー。
以下のコマンドで、「S3 バケット sample_bucket」に「ListBucket 権限」を「許可」する「sample-policy」という名前のポリシーが作成される。
※ sample_bucket というリソースが存在しなくてもポリシーは作成できる
aws iam create-policy \
--policy-name sample-policy \
--policy-document \
'{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::sample_bucket"
}
]
}'
AWS管理ポリシーをアタッチしたときと同様のコマンドでロールにポリシーをアタッチする。
aws iam attach-role-policy \
--role-name sample-role \
--policy-arn <作成したポリシーの ARN>
後片付け
ポリシーを全てデタッチしないと IAM ロールを削除できないため、IAM ロールにアタッチされたポリシーを全てデタッチする。
# 管理ポリシーのデタッチ
attached_policy_arn=$(
aws iam list-attached-role-policies \
--role-name sample-role \
--query 'AttachedPolicies[*].PolicyArn' \
--output text \
)
for policy_arn in $attached_policy_arn
do
aws iam detach-role-policy \
--role-name sample-role \
--policy-arn $policy_arn
done
# インラインポリシーのデタッチ
attached_inleine_policy=$(
aws iam list-role-policies \
--role-name sample-role \
--query 'PolicyNames[*]' \
--output text \
)
for inleine_policy in $attached_inleine_policy
do
aws iam delete-role-policy \
--role-name sample-role \
--policy-name $inleine_policy
done
IAM ロールを削除する。
aws iam delete-role --role-name sample-role
IAM ポリシーを削除する。
aws iam delete-policy --policy-arn <作成したポリシーの ARN>
【追記】EC2 インスタンス用の IAM ロールを作成する際の注意点
記事に書いた手順で EC2 インスタンス用の IAM ロールを作成したが、EC2 の IAM ロールのセレクトボックスに表示されず割り当てることができなかった。
調べたところ、EC2 インスタンスに使用する IAM ロールと インスタンスプロファイル を紐付ける必要があることが判明した。
コンソールからロールを作成する場合には、ロールと一緒にインスタンスプロファイルが作成されてロールに紐付けられる。
参考: https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#ec2-instance-profile
以下に、インスタンスプロファイルを紐付けるコマンドを示す。
※ ec2-role という IAM ロールにインスタンスプロファイルを設定する想定の手順
まず、インスタンスプロファイルを作成する。
aws iam create-instance-profile --instance-profile-name ec2-role
# インスタンスプロファイルの名前は、コンソールから作成したときに合わせて、
# 対象の IAM ロールと同じ名前にする
インスタンスプロファイルと IAM ロールを紐付ける。
aws iam add-role-to-instance-profile \
--instance-profile-name ec2-role \
--role-name ec2-role
これで EC2 インスタンスに使用できるロールになる。
参考ページ
- AWS のサービスにアクセス許可を委任するロールの作成
- AWS JSON ポリシーの要素: Principal
- 管理ポリシーとインラインポリシー
- AWS CLI のリファレンス
-
aws iam create-role
-
aws iam attach-role-policy
-
aws iam create-policy
-
aws iam list-attached-role-policies
-
aws iam detach-role-policy
-
aws iam delete-role
-
aws iam delete-policy
-
Discussion