ChatGPT で AWS IAM のポリシー JSON を作成してみた
こんにちは、アノテーション テクニカルサポートの 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 にお願いすることで、動作検証にかかる時間を劇的に短縮できそうです!
この記事が皆様のお役に立てば幸いです。