【AWS】Cloudformationとサービスロール

AWS

概要

Cloudformationスタックを作成する際、AWSリソースを作成・更新・削除するための権限設定のために、サービスロールを付与するのが健全な運用と言えます。

本記事では、Cloudformationに付与するサービスロールについてと作成手順について解説します。

もくじ

  • Cloudformationとサービスロールの関係
  • オススメのCloudformationサービスロール運用方針
  • サービスロール作成手順
  • まとめ

Cloudformationとサービスロールの関係

サービスロールとは

Cloudformationに限らず、AWSリソースが別のAWSリソースに対するアクションを実行する際には、AWSリソースに付与されたIAM Roleが必要となります。
これを「サービスロール」と呼びます。

AWS サービスにアクセス許可を委任するロールの作成

Cloudformationもサービスロールを付与できる


Cloudformationはテンプレートに従ったAWSリソースを作成・更新・削除を行いますが、この際に使用されるIAMロールをサービスロールを指定できます。

サービスロールが指定されていない場合は、実行するIAM Userに付与されているRoleが使用されます。

実行するIAM UserがAdministratorなど、十分な権限を持っている場合はサービスロールは不要ですが、チーム内できちんと権限を分けたり、部分的に外注したいといった場合には、サービスロールを意識する必要が出てきます。

なので、出来るだけ管理者がサービスロールを払い出して、Cloudformationスタック作成時にそれを利用するようにした方が健全と言えます。

オススメのCloudformationサービスロール運用方針

IAMベストプラクティス「最小権限を付与する」

AWSのIAMベストプラクティスに従うと、IAMポリシーには「最小権限を付与する」ことが推奨されています。

最小権限を付与する

とはいえ、これに厳密に従うと、構築対象のAWSリソースに対してそれぞれ必要最小限の権限を洗い出す作業が発生します。
Cloudformationスタックを拡張したり、別のスタックを新規作成する度に、細かな権限を設定していくのは大きな作業コストになり、あまり現実的ではありません。

オススメ運用方針

そこで、以下の方針でサービスロールを運用するのがいいのではないかと思います。

IAMは最小権限、それ以外のリソースには全権限を付与した、共通のサービスロールを一つだけ作成し、スタック作成時に使用する

IAMの最小権限は、具体的に以下の権限でいいと思います。
対象リソースは全てです。

iam:PassRole
iam:CreateRole
iam:DeleteRole
iam:AttachRolePolicy
iam:DetachRolePolicy
iam:GetRole
iam:PutRolePolicy
iam:DeleteRolePolicy

上記は、私がこれまでスタック構築してきた際に必要となった権限なので、場合によっては不足しているかもしれません。
その場合は、必要な権限を追加してください。

サービスロール作成手順

上記の運用方針に従ったサービスロールを作成する手順を説明します。

サービスロール用のIAMの最小権限ポリシー作成

まず、IAMの最小権限ポリシーの作成手順を説明します。
ここで作成したポリシーを、後ほどサービスロールにアタッチします。

IAMのコンソールから「ポリシー」をクリックして、ポリシー画面へ移動します

「ポリシーの作成」をクリック

「JSON」をクリック
ビジュアルエディタで先ほどの権限をポチポチ付与していってもOKです

以下のjsonをコピペします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "iam:DeleteRolePolicy",
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "*"
        }
    ]
}

「ポリシーの確認」をクリックします

ポリシー名と説明を入力します。
例えば以下のようにします。

名前: MinimumIamPolicyForCloudformation
説明: Minimum IAM policy for cloudformation.

「 ポリシーの作成」をクリックしてポリシー作成完了です。

サービスロールの作成

次に、サービスロールの作成手順を説明します。

IAMのコンソールから「ロール」をクリックして、ロール画面へ移動します

「ロールの作成」をクリック

ここでは以下の内容を選択して、「次のステップ: アクセス権限」クリック

  • 信頼されたエンティティの種類 → AWSサービス
  • ロールを使用するサービス → CloudFormation
  • ユースケース → CloudFormation

IAMポリシーをアタッチします。
以下のポリシーにチェックを入れて、「次のステップ: タグ」をクリック
ポリシーのフィルタで絞り込めます。

  • PowerUserAccess
  • MinimumIamPolicyForCloudformation
    (先ほど作成したIAMの最小権限ポリシー)

タグはオプションなので入力しなくてもOKですが、ここでは以下のように設定しました。

ロール名を入力して、「ロールの作成」クリック
サービスロール作成完了です

まとめ

Cloudformationとサービスロールについての関係とオススメ運用方針、作成手順を解説しました。

Cloudformationスタックを使用したAWSリソース構築の際には、サービスロールを付与する方が健全ですが、ガチガチに固めすぎるもの現実的ではないので、程よいところで運用するのがオススメです。

Cloudformationサービスロールを付与する必要性が発生したり、程よく健全な運用にしたい場合は、本記事が参考になると思います。

ぜひ活用してください。