【AWS】CloudFormationでIAMロールを作成する方法
前置き
Lambdaなどを作る際に、指定しなければ自動でIAMロール・ポリシーが作成され、
そういう積み重ねで気づかぬうちに増えていくIAM…。
どのIAMが必要でどのIAMが不要なのか、わからなくなってしまうことはあるあるだと思います。
そこで該当サービスとIAMロールをCloudFormationで作成して、該当サービスとIAMが紐づいて管理されるので、管理しやすくなります。
今回はIAMロールを作成するところだけをピックアップして紹介します。
CloudFormation実行用のIAMロール作成
AWSの画面上部にある検索画面に「iam」と入力します。
入力して出てきた「IAM」をクリックします。
アクセス管理のロールをクリックします。
ロールを作成をクリックします。
信頼されたエンティティを選択
信頼されたエンティティタイプ
AWSのサービスを選択します。
ユースケース
サービスまたはユースケースはCloudFormationを選択します。
許可を追加
許可ポリシー
のちに追加するので、特に何もせず次へをクリックします。
名前、確認、および作成
ロールの詳細
ロール名を入力し、ロールを作成をクリックします。
ロールを表示をクリックします。
インラインポリシーを作成をクリックします。
アクセス許可を指定
JSONに切り替えて、下記JSONを張り付けて次へをクリック。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:UpdateAssumeRolePolicy",
"iam:PassRole",
"iam:DetachRolePolicy",
"iam:DeleteRolePolicy",
"iam:TagRole",
"iam:CreateRole",
"iam:DeleteRole",
"iam:AttachRolePolicy",
"iam:UpdateRole",
"iam:PutRolePolicy"
],
"Resource": "*"
}
]
}
確認して作成
ポリシーの詳細
ポリシー名を入力して、ポリシーの作成をクリックします。
CloudFormationの作成
スタックの作成
AWSの画面上部にある検索画面に「cloudformation」と入力します。
入力して出てきた「CloudFormation」をクリックします。
スタックの作成をクリックします。
前提条件 - テンプレートの準備
既存のテンプレートを選択 を選択します。
テンプレートの指定
テンプレートファイルのアップロードを選択し、ファイルの選択で下記yamlのようなファイルをアップロードし、次へをクリックします。
例ではLambdaに必要なマネージドポリシーと、適当な独自ポリシーを設定してみます。
※ここはお好みでポリシーを変更下さい
AWSTemplateFormatVersion: "2010-09-09"
Description: Create IAM Roles Sample
Resources:
# IAMロール
SampleRole:
Type: AWS::IAM::Role
Properties:
RoleName: sample-lambda-role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
# IAMマネージドポリシー
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
# 独自IAMポリシー
Policies:
- PolicyName: sample-lambda-policy
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- lambda:InvokeFunction
Resource:
- "arn:aws:lambda:ap-northeast-1:123456789012:function:sample-lambda1"
- "arn:aws:lambda:ap-northeast-1:123456789012:function:sample-lambda2"
- Effect: Allow
Action:
- secretsmanager:GetSecretValue
Resource:
- "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:sample-secret-123456"
- "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:sample-secret-000000"
スタックの詳細を指定
スタック名を提供
スタック名を入力し、次へをクリックします。
スタックオプションの設定
さきほど作成したIAMロールを指定します。
チェックして次へをクリックします。
確認して作成
内容を確認して、送信をクリックします。
少し待つと、CREATE_COMPLETEと表示されます。
ここまでくればIAMが作成されました。
もし失敗すると、この画面でエラーを表示してくれます。
作成されたIAMロール
これがCloudFormationで作成されたIAMロールになります。
注意点
CloudFormationを動かすためのIAMロールを作成しました。
つまり自身の権限とは別に、CloudFormationにIAMの操作ができる権限を付与するため、思わぬ事故には十分気を付けてください。
自分自身にIAMを操作する権限がなくとも、CloudFormationを通して作れてしまうので、取扱注意です。
まとめ
CloudFormationを使ってIAMを作成してみました。
インフラ構成をコード化できる(IaC)ので、最初のyaml(コード)を書くのは時間かかりますが、書けさえすれば管理も楽ですし横展開も楽、引継ぎや自動化にも強くていいとこ尽くしです。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。