🔧

AWS CLI で IAM ロールを作成する

2021/10/17に公開約4,900字

概要

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 インスタンスに使用できるロールになる。

参考ページ

GitHubで編集を提案

Discussion

ログインするとコメントできます