はじめに
こんにちは、KUDs です。
前回までで、Claude Code から AWS を操作できる状態ができあがりました。
ただ、まだリソースは1つも作っていません。わざと作らずに残してあります。
理由は単純で、AI にクラウドを触らせるのは、それなりに怖いことだからです。
この記事では、実際にモノを作り始める前に、AI が想定外のことをしないようにする設定を入れます。
所要時間は20分ほど、費用はかかりません。
そして、この記事でいちばんお伝えしたいのは、よく見かける誤解の訂正です。
CLAUDE.md にルールを書いても、それは「絶対に守られるルール」にはなりません。
「AI への指示書に禁止事項を書いておけば安全」という説明を見かけますが、これは仕組みを誤解しています。
なぜそうなのか、では何が絶対のルールになるのかを、公式情報をもとに整理していきます。
この記事について
この記事は、AWS を初めて触る方向けのシリーズの1本です。
シリーズ全体の地図と読む順番は、ロードマップにまとめてあります。

ステップ4の「VS Code に Claude Code を導入する」が終わっていることが前提です。

また、この記事の動作確認では aws コマンドを使います。
前回の「AWS CLI のインストールと初期設定」まで終わっていると、そのまま試せます。

なぜ、作り始める前に設定するのか
「そこまで神経質にならなくても」と思われるかもしれません。
理由を3つ挙げます。
1. AWS には使いすぎを止める上限がありません
シリーズの最初の記事でも触れましたが、これが根本的な理由です。
予算アラートは通知するだけで、支払いを止めてはくれません。レンタルサーバーのように「定額で止まる」構造にはなっていません。
2. AI は悪意なく間違えます
AI が暴走する、という話ではありません。もっと地味な事故が起きます。
- 「使っていないバケットを消して」と頼んだら、使っているものまで対象に入っていた
- 練習用のつもりが、別の重要なリソースに触れてしまった
- エラーを解決しようとして、権限を広げる方向に動いた
指示が曖昧だと、解釈の幅が広がるというだけの話です。人間の同僚に頼んでも起きることですが、AI は実行が速いぶん、気づいたときには終わっています。
3. 初心者は「何が危険か」をまだ判断できません
確認ダイアログに「実行しますか?」と出ても、それが危険かどうか判断できなければ意味がありません。
だからこそ、判断できないうちは、そもそも実行できないようにしておくのが合理的です。
【重要】CLAUDE.md は「絶対のルール」にはなりません
本題に入る前に、ここをはっきりさせておきます。
CLAUDE.md は、Claude Code にプロジェクトの前提や方針を伝えるためのファイルです。
「このプロジェクトでは npm を使う」「日本語で応答して」といったことを書いておくと、Claude がそれを踏まえて動いてくれます。
では、ここに「リソースを削除しないこと」と書けば、削除されなくなるのでしょうか。
なりません。
公式ドキュメントに、はっきりこう書かれています。
Permission rules are enforced by Claude Code, not by the model. Instructions in your prompt or
CLAUDE.mdshape what Claude tries to do, but they don’t change what Claude Code allows.(権限のルールを強制しているのは Claude Code であって、モデルではありません。プロンプトや
CLAUDE.mdに書いた指示は、Claude が何をしようとするかには影響しますが、Claude Code が何を許可するかは変えません)
つまり、こういう違いがあります。
| 何をするものか | 強制力 | |
|---|---|---|
CLAUDE.md | AI へのお願い・方針の共有 | なし(守ろうとはするが保証はない) |
settings.json の権限ルール | Claude Code 本体が実行前に判定する | あり(一致したら実行されない) |
CLAUDE.md は「新人に渡す作業マニュアル」、settings.json は「そもそも鍵がかかっているドア」だと考えると分かりやすいと思います。
マニュアルに「サーバー室に入らないこと」と書いてあっても、鍵がかかっていなければ入れてしまいます。
本当に入られたくないなら、鍵をかけます。
だからといって CLAUDE.md が無意味なわけではありません。
役割が違うだけなので、両方を適切に使い分けます。この記事では両方設定します。
安全設定の全体像
これから3つの層を作ります。外側には、すでに設定済みのものもあります。
| 層 | 何をするか | 強制力 | いつ設定したか |
|---|---|---|---|
| AWS の予算アラート | 想定外の課金に気づく | 通知のみ | ステップ2で設定済み |
| IAM の権限 | そもそも触れる範囲を絞る | 強い | ステップ2で設定済み |
| ① 権限モード | 実行前に毎回確認させる | 強い | この記事 |
② settings.json | 特定の操作を禁止する | 強い | この記事 |
③ CLAUDE.md | 方針を伝える | なし(お願い) | この記事 |
重要なのは、どれか1つに頼らないことです。
それぞれ穴があるので、重ねて使います。
層①: 権限モードを理解する
Claude Code には、どこまで自動で実行させるかを切り替えるモードがあります。
パネル下部のモード表示をクリックすると切り替えられます。
| モード | 挙動 | 初心者向けか |
|---|---|---|
| Manual | 各ツールの初回使用時に確認を求める | 学習中はこれを使ってください |
| Plan | 実行せず、やることの計画だけ立てる | 何をされるか先に見たいとき |
| Accept Edits | ファイル編集を自動承認する | コードを書くフェーズで |
| Auto | 安全性チェックつきでほぼ自動実行 | 慣れてから |
| Bypass Permissions | 確認をほぼ全て飛ばす | 使わないでください |
Manual のまま使ってください
毎回確認が入るのは面倒に感じますが、そこで表示されるコマンドを読むことが、いちばんの勉強になります。
「このコマンドは何をするんだろう」と思ったら、承認する前に Claude に聞けばいいのです。
いま実行しようとしているコマンドは何をするものですか?危険はありませんか?
これができるのは AI と作業する大きな利点です。
分からないまま承認するのが、いちばん危険です。
Bypass Permissions は使わないでください
このモードは、確認をほぼ全て飛ばして実行します。
作業は速くなりますが、初心者が使うべきではありません。
何が起きたかを把握できないまま、リソースが作られたり消えたりします。
「気をつけて使わないようにする」だけでは、疲れているときや急いでいるときに手が滑ります。
そこで、そもそも切り替えられないように設定してしまいます。 次の節で一緒に設定します。
層②: settings.json で禁止事項を決める
ここが実効性のある本命の設定です。
ファイルを作る
以前のステップで作った作業フォルダ(~/aws-claude-practice)を VS Code で開いてください。
ターミナルで以下のコマンドを実行するとすぐ開けます。
code ~/aws-claude-practice/
このフォルダの中に、.claude フォルダを作り、さらに settings.json を作りましょう。
~/aws-claude-practice/
└── .claude/
└── settings.json
Claude Code に頼んでも作れます。
.claude/settings.jsonというファイルを作ってください。中身は次に指示します。
設定内容
作成した settings.json に、以下を貼り付けてください。
{
"permissions": {
"defaultMode": "default",
"disableBypassPermissionsMode": "disable",
"deny": [
"Read(~/.aws/**)",
"Bash(aws iam *)",
"Bash(aws organizations *)",
"Bash(aws ec2 terminate-instances*)",
"Bash(rm -rf *)"
],
"ask": [
"Bash(aws s3 rb*)",
"Bash(aws s3 rm*)",
"Bash(aws * delete-*)"
]
}
}
それぞれの意味
| 設定 | 意味 |
|---|---|
"defaultMode": "default" | 起動時は Manual モードにする |
"disableBypassPermissionsMode": "disable" | Bypass Permissions モードに切り替えられなくする |
Read(~/.aws/**) | AWS の認証情報ファイルを AI に読ませない |
Bash(aws iam *) | IAM の操作を禁止(権限をいじられないため) |
Bash(aws organizations *) | Organizations の操作を禁止 |
Bash(aws ec2 terminate-instances*) | サーバーの削除を禁止 |
Bash(rm -rf *) | Mac 側のファイル一括削除を禁止 |
ask の3行 | S3 バケットの削除・ファイル削除・各種 delete 系は必ず確認する |
Bash(aws organizations *) を入れている理由が分かるでしょうか。
ステップ2の記事で書いた、「Organizations を作るとクレジットが即座に失効する」という話です。
金銭的な影響が最も大きい操作なので、そもそも実行できないようにしています。
deny と ask の違い
deny… 一致したら実行されません。確認も出ませんask… 一致したら必ず確認を求めます(承認すれば実行されます)
そして重要なのが優先順位です。
deny は allow より優先されます。
「許可したつもりがないのに実行された」を防ぐには、deny 側に書くのが確実です。
書き方の注意点
ルールの書き方には、知っておくと事故を防げる性質があります。
*は途中のスペースも含めて一致します。Bash(aws * delete-*)はaws s3api delete-bucket ...にも一致します- 末尾の
*の前にスペースがあると、単語の区切りが必要になります。Bash(aws iam *)はaws iam list-usersに一致しますが、スペースなしのBash(aws iam*)はより広く一致します &&などで複数のコマンドをつないでも、それぞれが個別に判定されます。 禁止コマンドを別のコマンドの後ろにつないで回避する、ということはできません
設定が効いているか確認する
Claude Code のパネルで /permissions と入力すると、現在有効なルールの一覧と、それぞれがどのファイル由来かを確認できます。
設定を書いたのに反映されていない場合は、ここで確認してください。
層③: CLAUDE.md で方針を伝える
最後に CLAUDE.md を作ります。
繰り返しになりますが、これは強制力を持ちません。
「守らせる」ためではなく、「そもそも危ないことをしようとしないように、方針を共有する」ために書きます。
作業フォルダの直下に CLAUDE.md を作り、こんな内容にしておきます。
# このプロジェクトについて
AWS の学習用の練習環境です。作業者は AWS の初心者です。
## 方針
- 使用するリージョンは常に ap-northeast-1(東京)にしてください
- リソースを作成する前に、想定される月額料金の目安を伝えてください
- 作成したリソースは、名前に必ず `practice-` を付けてください
- 削除や停止を伴う操作は、対象を一覧で示して確認を取ってから実行してください
- コマンドを実行する前に、そのコマンドが何をするものかを一言で説明してください
## 補足
- 無料利用枠とクレジットの範囲で学習しています。高額になりうる構成は提案前に知らせてください
- 分からないことは推測で進めず、質問してください
とくに効くのが「コマンドの説明を求める」項目です。
承認するかどうかを判断する材料になりますし、そのまま教材になります。
料金の目安を先に言わせるのも効果的です。
deny ルールでは「高額になりそうな構成」を表現できないので、こういう曖昧な基準こそ CLAUDE.md の出番です。
役割分担をもう一度整理すると、こうなります。
- 明確に禁止できることは
settings.json(鍵をかける) - 曖昧だがそうあってほしいことは
CLAUDE.md(方針を伝える)
動作確認をしてみる
設定が効いているか、実際に試してみましょう。
Claude Code のパネルで、こう入力してください。
このアカウントの IAM ユーザー一覧を見せてください。
このコマンドは見るだけの安全なコマンドですが、先ほど Bash(aws iam *) を deny に入れたので、ブロックされるはずです。
Claude が「設定により実行できません」や、「コマンドの実行許可をお願いします」といった趣旨の反応をすれば、設定は正しく効いています。
確認できたら、今度は許可されている操作を試してみます。
S3 バケットの一覧を見せてください。
こちらは通常どおり確認ダイアログが出て、承認すれば実行されます。 (おそらく、aws s3 ls 等のコマンド許可を求められるはずです)
「止まるものは止まり、通るものは通る」ことが確認できれば完了です。
正直な話:これで完全ではありません
ここまでやっておいてなんですが、この設定で完全に安全になるわけではありません。
理由は単純で、危険なコマンドをすべて列挙することは不可能だからです。
AWS には200以上のサービスがあり、それぞれに削除・変更のコマンドがあります。書ききれません。
ですので、この設定は「よくある事故を減らすもの」だと理解してください。
本当の安全網は、AWS 側にあります。
- IAM の権限(ステップ2で設定済み)… そもそも触れる範囲が限られている (興味があれば、
setting.json内の、"Bash(aws iam *)",の行だけ消してから再度依頼してみてください。ERROR が発生するはずです。) - クレジットの範囲… 学習用アカウントなら、被害額に上限がある
- 予算アラート(ステップ2で設定済み)… 想定外の課金に気づける
そして最後の砦は、あなた自身が確認ダイアログを読むことです。
Manual モードのまま使い、表示されたコマンドに目を通す。
これが、どんな設定よりも効きます。
よくある質問
Q. settings.json はどこに置くのが正しいですか?
A. プロジェクトごとの設定はプロジェクト直下の .claude/settings.json、すべてのプロジェクトに効かせたい設定は ~/.claude/settings.json に置きます。この記事では練習フォルダに置いていますが、危険なコマンドの禁止はどのプロジェクトでも効いてほしいので、慣れてきたらユーザー設定に移すのがおすすめです。
Q. .claude/settings.local.json というファイルもできましたが何ですか?
A. 確認ダイアログで「はい、今後は確認しない」を選んだときに、そのルールが保存されるファイルです。自分専用の設定なので、他の人と共有したい設定は settings.json のほうに書きます。
Q. 設定を書いたのに効きません
A. /permissions でルール一覧を確認してください。JSON の書式が壊れていると読み込まれないので、カンマの過不足などもあわせて確認してください。
Q. CLAUDE.md は本当に意味がありますか?
A. あります。強制力がないだけで、Claude は書かれた方針に沿って動こうとします。 「リージョンは東京」「料金の目安を先に言う」といった指示は実際によく効きます。
危険なのは「CLAUDE.md に書いたから絶対に安全」と思い込むことです。役割を理解して使えば有用です。
Q. 毎回確認するのが面倒になってきました
A. その感覚が出てきたら、慣れてきた証拠です。ただしモードを緩めるのは、表示されるコマンドの意味が分かるようになってからにしてください。Bypass Permissions だけは、今回の設定で切り替えられなくしてあります。
Q. 会社のアカウントでも同じ設定でいいですか?
A. この記事は個人の学習用アカウントを前提にしています。業務で使う場合は、組織側で管理された設定を使うなど、より厳格な仕組みが必要です。
さいごに
AI に AWS を触らせる前の安全設定を解説しました。
やったことをまとめます。
- 権限モードを Manual のまま使う(確認ダイアログを読む習慣をつける)
settings.jsonで禁止事項を決める(denyは実行そのものを止める)- Bypass Permissions モードを使えなくする
CLAUDE.mdで方針を伝える(強制力はないが有用)- 実際にブロックされることを確認する
そして、この記事でいちばん覚えて帰っていただきたいのは、この一点です。
CLAUDE.md はお願い、settings.json の deny は鍵。
「AI への指示書に書いたから安全」という説明を見かけたら、それは仕組みの誤解だと思い出してください。
さて、これで安全装置はすべて揃いました。
次はいよいよ、実際に手を動かして、自分の Web サイトをインターネットに公開します。

シリーズの全体像は、ロードマップから確認できます。

KUDs のサービス
KUDs では、実際に AWS 上で動く Web サービスを公開しています。


ご質問やご指摘は contact@kuds.jp までお寄せください。
「ここで詰まった」という報告は、記事を良くするうえでいちばんありがたいフィードバックです。
コメント