CLI で IAM ロールを作ろう

CLI で IAM ロールを作ろう

はじめに

こんにちは、パオの人ことさすけです!
今回は、公式ドキュメント [1] を参考に、CLI コマンドを使用して IAM ロールの作成および信頼関係の定義やポリシー設定などを行ってみたいと思います。

信頼関係を定義した JSON ファイルを作成

まずは、信頼関係を定義した JSON ファイルをローカルに作成しておきます。
今回は、以下の内容で sample_trust.json というファイルを作成しておきます。

sample_trust.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::アカウントID:root" },
            "Action": "sts:AssumeRole",
            "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } }
        }
    ]
}

IAM ロールの作成と信頼関係を定義

まず、IAM ロールの作成を行うためのコマンドは aws iam create-role というコマンドを使用します。[1]
信頼ポリシーの定義は、このコマンドのオプションとして存在しており、--assume-role-policy-document を追加することで実現できます。[2]

実際のコマンドは以下の通りです。
ロール名パス/ファイル名 は、それぞれ実際のロール名と sample_trust.json のパスに変更してください。(私は検証として、ロール名を test_role_pao としています)

aws iam create-role --role-name ロール名 --assume-role-policy-document file://パス/ファイル名

さて、実際に実行して検証用ロール名(test_role_pao)が存在するのか、マネジメントコンソールを覗いてみましょう。

image-20

すると、画像の通りちゃんとロール(test_role_pao)が作成されていますね。
さて、信頼関係の定義がされているかどうかについても確認してみましょうか。

image-21

しっかり sample_trust.json 通りの信頼ポリシーが定義されていますね!

ついでにポリシーのアタッチ

さて、ついでにポリシーのアタッチもしてみましょうか!
ポリシーをアタッチには、aws iam attach-role-policy の実行が必要です。[1]

--role-name というオプションを使用して、先ほど作成した IAM ロール名を指定して、--policy-arn というオプションで、アタッチするポリシーを指定します。[3]

aws iam attach-role-policy --role-name ロール名 --policy-arn ポリシーARN

上記コマンドを実際に実行してみましょう!
今回は、先ほど作成した IAM ロール(test_role_pao)に対して、AmazonS3FullAccess をアタッチしてみました。

マネジメントコンソールを確認しに行くと、ちゃんとアタッチされていることを確認できました!
ちなみに、カスタマー管理ポリシーに関しても「ロール名」「ポリシー ARN」を指定することでアタッチ可能です。

image-22

ローカルで作成した JSON ファイルでインラインポリシー設定

ポリシーのアタッチに関係してくるケースとして「ローカルで JSON ファイルを書いて、インラインポリシーを作成したい」というものがあるかと思います。

まず、以下のような JSON ファイルを検証用として作成します。

sample_permission.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
        "Sid": "AllowS3Access",
        "Effect": "Allow",
        "Action": ["s3:*"],
        "Resource": "*"
        }
    ]
}

その後、aws iam put-role-policy というコマンドを実行します。[1]

オプションとして、ロール名を指定する --role-name、さらにローカルに作成した sample_permission.json の AWS 上でのインラインポリシー名を定義するために --policy-name を使用します。[4]

sample_permission.json のパスを指定するために、--policy-document というオプションも追加します。[4]
実際のコマンドは以下のとおりです。

aws iam put-role-policy --role-name ロール名 --policy-name ポリシー名 --policy-document file://パス/ファイル名

ロール名に test_role_pao、ポリシー名に test_policy_pao を入れて実行した後に、マネジメントコンソールを確認してみると以下のとおりしっかり追加されてました!

image-23

さらにさらにタグ付けも

さて、ここまで来たらタグ付けもやってみましょうか!
タグ付けは aws iam tag-role という CLI コマンドを実行することで可能です。[1]

これまで通りの流れですが、--role-name でロール名の指定をしましょう。
付与するタグの指定は、--tags オプションで可能です。[5]

実際に以下のコマンドを実行してみましょう。
今回は、Key を Test 、Value を PAO として実行しました。

aws iam tag-role --role-name ロール名 --tags Key=キー,Value=

またまた、マネジメントコンソールを確認してみると、ちゃんとタグが追加されていることがわかりました!

image-24

まとめ

さて、今回は CLI コマンドを使用して IAM ロールの作成からタグ付けまで色々なことを行いました!
マネジメントコンソールを使用しなくとも、CLI で色々できるものなんですねぇ。

ちなみに、CloudShell を使用しても信頼関係の定義やポリシーのアタッチも同様にできますので、そちらで気軽に試してみるのもありですね!
その際は、「アクション」から「ファイルのアップロード」を選択して、使いたい JSON ファイルのアップロードをお忘れなく!!

余談

完全に余談ですが、「カスタマー管理ポリシー」と「インラインポリシー」って違うんですね、恥ずかしながら知らなかったです、、。
もし、私と同じような方いらっしゃればこの機会に覚えておくといいかもです!

カスタマー管理ポリシー = ポリシー単体で ARN がある(独立して存在している)
インラインポリシー = IAM に直接埋め込むため固有の ARN が存在しない

参考文献

[1] IAM ユーザーにアクセス許可を付与するロールを作成する - AWS Identity and Access Management
[2] create-role — AWS CLI 1.38.8 Command Reference
[3] attach-role-policy — AWS CLI 1.38.8 Command Reference
[4] put-role-policy — AWS CLI 1.38.8 Command Reference
[5] tag-role — AWS CLI 1.38.8 Command Reference

アノテーション株式会社

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.