【AWS】CloudFormationでリソースを作成するときの最小限IAMポリシーを構築する

2022-11-21
hero画像

💫 はじめに

この記事では、CloudFormationでリソースを作成する際に必要な最小限のポリシーを構成する方法を紹介します。
いくつかの方法を紹介しますので、長所/短所を比較して気に入った方法をご活用ください!

💫 ざっくり用語説明

⭐︎ AWS:
Amazon Web Servicesの略。
Amazonが提供するクラウドコンピューティングサービス。
クラウド上にインフラを(比較的)楽に作れる。

⭐︎ CloudFormation:
ソースコード(template)を利用してAWSリソースを自動で作成したり管理したりするために使うサービス。
いわゆるIaC(Infrastructure as Code)を目的とする。
templateさえあれば同じリソースを簡単に作ることができて便利。

⭐︎ IAM:
Identity and Access Managementの略。
認証やアクセス許可周りを管理するためのサービス。

💫 モチベーション

AWSのCloudFormationを使うにあたって最小限ポリシー作成に時間がかかったので、今後は楽をしたい。

💫 公式ドキュメント

CloudFormation: https://aws.amazon.com/jp/cloudformation/

💫 準備

  • AWSアカウントの作成
  • Git Bashかコマンドプロンプト

💫 環境

  • Windows11

💫 方法1: AWS CLIを使う

長所:

  • 単純
  • 公式が用意しているので安心

短所:

  • 本当にリソース作成に必要な最小権限しかわからないので、templateによっては足りないポリシーがある
  • 対応していないリソースがある

この方法では、下記の下準備が必要になります。

  1. AWS CLIの用意

  2. AWS Configの設定

  3. jqのインストール

公式Doc(https://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html#cloudformation)にあるように、 以下のようなコマンドで、リソースに関する権限を確認できます。

aws cloudformation describe-type --type RESOURCE --type-name AWS::EC2::VPC

この例ではVPCの作成に必要な権限を確認しています。
「AWS::EC2::VPC」の部分を変更すればほあのリソースでも確認できます。

出力の「Schema」の部分にいろいろと書いてあるのですが、とても見にくいです…
このため、jqを用いた以下のようなコマンドを実行します。

aws cloudformation describe-type --type RESOURCE --type-name AWS::EC2::VPC --query Schema --output text | jq

出力のhandlersプロパティを見ると、createやreadに必要な権限が列挙されていることがわかります。
これを参考にIAMのポリシーを作成していきましょう!

💫 方法2: IAM Access Analyzerを使う

長所:

  • 過去に行った操作をそのままポリシーにしてくれる
  • 公式が用意しているので安心

短所:

  • 最小権限かどうかは不明
  • クロスアカウントやフェデレーションログインだとうまくいかないかも?

IAM Access Analyzerを使うと、指定したアカウントが過去のイベントで使用した権限をもとにポリシーを作成してくれます。
この方法はすでに様々なところで紹介されているのでその記事を紹介するにとどめます。

とても楽ですが、本当に必要な権限を絞り込む作業が必要になります。
また、複数アカウントを使用している場合などはうまくいかないので注意が必要です。

💫 方法3: 3rd Partyサービスを使う

長所:

  • いろいろなサービスがある

短所:

  • セキュリティや精度が保証されない

私もあまりよくわかっていませんが、いろいろあるようです。

  • cfn-nag を使えば、不必要な権限を検知できるようです。
  • cfngam を使えば、templateファイルから必要な権限がわかるようです。

後者は本当に欲しかった機能…
とはいえstarが0の個人開発のようなので利用するか悩むところ…

💫 最後に

いくつかの方法を紹介しましたが、一番確実なので業務レベルではAWS CLIを使うのが良いでしょうか。
IAM Access Analyzerのほうが楽なので迷います。
ここは好み次第だと思います。

あとは

  • (あるかわからない)公式Docをあさるか
  • 適当にブログを探すか
  • cloudFormationでエラーが出るたびにポリシーを追加していく
    などでしょうか…

今後、公式でいい感じの機能が出てくることを祈りましょう。

それでは良きAWSライフを!!

(おまけ)
過去のECRリソースを作る記事 で少しIAMのことも触れているので興味がある方はどうぞ!


©2022.うりゅAll Rights Reserved.