ChatGPT で AWS IAM のポリシー JSON を作成してみた

手間のかかる AWS IAM のポリシー JSON 作成を、ChatGPT にお願いしてみました。
2023.04.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、アノテーション テクニカルサポートの Shimizu です。

日々のサポート業務にて、AWS IAM のポリシー設定を用いた様々な動作検証を行います。ですが毎回 AWS サービスのドキュメントをいくつも調べて、目的通りの IAM ポリシー JSON を作成する作業は容易ではなく、かなりの時間を要してしまいます。

そこで今回は、ChatGPT に IAM ポリシーの JSON サンプル作成をお願いしてみました!

やってみた

まず ChatGPT に、以下のような指示を与えてみます。
すると30秒ほどで答えが返ってきました。

生成された IAM ポリシーの JSON :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowStartStopInstances",
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances"
      ],
      "Resource": "arn:aws:ec2:*:*:instance/*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/TagName": "TagValue"
        }
      }
    }
  ]
}

おお!
内容を検証したところ、きちんと目的に沿った IAM ポリシー の JSON が生成されています。
ポリシーの動作説明や注意が記載されている点(EC2 インスタンスの一覧を取得する ec2:DescribeInstances アクションの不足)も素晴らしいです!

そこで次は、以下のように追加で指示を与えてみました。
すると、30秒ほどで修正済みの IAM ポリシーが生成されました。

生成された IAM ポリシーの JSON :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowStartStopInstances",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/TagName": "TagValue"
                }
            }
        },
        {
            "Sid": "AllowDescribeInstances",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}

おおお!
今回もきちんと目的に沿った IAM ポリシー の JSON が生成されています!
ポリシーの説明も的確です!

実は 2 回目の指示には引っかけ要素があり、ChatGPT が誤った回答をすることを密かに期待していました。
というのも、後から追加した ec2:DescribeInstances アクションはタグによる制限が不可能であり、他のアクション(ec2:StartInstances や ec2:StopInstances)とはセクションを分けて記述する必要があるためです。(詳細はこちらの記事で解説しています)

なので ChatGPT が各アクションの特性を考慮せず、間違ったポリシー(単純に1つのセクション内に列記する)を生成するのではと想定していました。
ところが実際にはその点もきちんと考慮し、ec2:DescribeInstances を別セクションに分けた適切なポリシーを生成しているのには本当に驚きました。

注意事項

もっと詳しい指示を与えることで、より具体的な IAM ポリシーを作成することも可能ですが、実際に所有している AWS アカウント ID やリソース ID を ChatGPT にプロンプトとして入力しないよう注意しましょう。あくまでも ChatGPT ではダミーサンプルの作成にとどめ、生成された JSON の内容を各自の環境で実際のリソース ID に置き換えて使用することを推奨します。

さいごに

いかがでしたでしょうか。
今回作成したのは基本的な IAM ポリシーですが、この精度なら複数の AWS サービスが組み合わさった複雑な IAM ポリシーのサンプル作成や、想定通りに動作しないポリシーの訂正なども ChatGPT にお願いすることで、動作検証にかかる時間を劇的に短縮できそうです!

この記事が皆様のお役に立てば幸いです。