最近、Step Functionsなどを触りながら、AWSで何か面白いことができないか考えているむらのです。
Lambdaを動かしてみたり、S3とつないでみたり、Step Functionsで処理をつないでみたり。
AWSはサービス同士を組み合わせることで、できることが一気に増えていくのが面白いなと感じています![]()
ただ、いろいろなサービスを触るようになると、かなりの確率で出てくるのが IAMロール です。
- このLambdaには何の権限が必要なんだろう
- Step FunctionsからLambdaを呼ぶなら、どこに権限を付けるんだろう
- とりあえずFullAccessを付ければ動くよな〜
と、とても最初はロールを、AWSサービスに付随する少し面倒な設定くらいに考えていました。
でも触っていくうちに、ロールは単なる設定ではなく、
このサービスに、何を許可するのか
を決める重要な部分なんだと感じるようになりました。
そこで最近、ロールを考えるときに意識しているのが、
「誰が・何に・何をするのか」
という考え方です。
コツ
例えば、
Lambdaが商品データ用S3からファイルを読む
という処理がある場合、
- 誰が:Lambda
- 何に:商品データ用S3
- 何をする:読む
と分解します。
すると、
Lambda用ロールに、対象S3への
s3:GetObjectを付ける
という形になります。
つまり、ロール設計のコツは、
権限を考える前に、その主体の仕事を日本語で1文にすること
です。
いきなりIAMポリシーのJSONやAWSサービス名から考え始めると難しく感じます。
ですが、
このLambdaは何をするのか?
から考えれば、
- S3を読む
- DynamoDBに書く
- CloudWatch Logsにログを出す
というように、必要な操作が見えてきます。
あとは、それをAWSの権限に置き換えていくだけです。
もう一つ、迷ったときに使いやすいのが、
この権限を消したら、この処理はできなくなるか?
という考え方です。
消しても問題なく処理できるのであれば、その権限は必要ない可能性があります。
最小権限を考えるときにも、かなり使いやすい考え方だと思っています。
AIエージェントに考えてもらうプロンプト
とはいえ、必要な権限を毎回すべて自分で調べるのは少し大変です。
そこで、AIエージェントにも同じ考え方でロールを整理してもらえるように、こんなプロンプトを使います。
あなたはAWSのIAM設計に詳しいクラウドアーキテクトです。
以下の要件をもとに、必要なIAMロールを考えてください。
【要件】
ここにシステムの要件を書く
ロールはAWSサービス名から決めるのではなく、
必ず以下の順番で考えてください。
1. 誰が使うのか
2. その主体は何をするのか
3. 何に対して操作するのか
そのうえで、最小権限の原則に従って
必要なIAMロールを設計してください。
例えば、
「Lambdaが商品データ用S3からファイルを読む」
↓
Lambda用ロール
↓
対象の商品データ用S3に対する s3:GetObject のみ
という考え方です。
不要な権限や、とりあえずFullAccessを付ける設計は避けてください。
出力は以下の形式で簡潔にまとめてください。
| 誰が | 何をする | 対象 | 必要な権限 | ロール名 |
| --- | --- | --- | --- | --- |
最後に、
「なぜこのロールが必要なのか」
「削除できそうな余計な権限はないか」
を一言ずつ説明してください。
要件から判断できない部分は、
勝手に権限を追加せず「要確認」としてください。
ポイントは、AIエージェントにもいきなり権限を考えさせるのではなく、
誰が → 何をする → 何に対して
という順番で整理させることです。
これだけでも、理由が分からないまま大量の権限が出てくることをかなり防ぎやすくなります。
まとめ
IAMロールは最初、サービスごとに覚えるもののように感じていました。
でも実際には、
誰が → 何に → 何をする
と考えるだけで、かなりシンプルになります。
ロールを先に考えるのではなく、
まず「このサービスは何の仕事をするのか」を日本語で考える。
その仕事に必要な権限だけを後から付ける。
最近は、この順番で考えるのが一番分かりやすいなと思っています。
AWSを触りながら、また良さそうな考え方や使い方が見つかったらまとめていこうと思います。