こんにちは!クラウドインフラの構築やアプリ開発、毎日本当にお疲れ様です。AWSを使ってシステムを作っていると、様々な機能があって便利ですよね。でも、「権限の管理」で頭を悩ませた経験はありませんか?
「とりあえず動かすために、権限を広めにしておこう…」
「どの権限が必要なのか調べるのが大変だから、すべて許可(*)にしちゃえ!」
開発のスピードを優先するあまり、そんなふうに妥協してしまった経験、きっと一度や二度ではないはずです。実はその優しさが、のちに大きなセキュリティリスクを招いてしまうことをご存知でしょうか?
今回は、新人のIT担当者やセキュリティに初めて触れる開発者の方に向けて、家の防犯にたとえながら、AWSの「最小権限の原則」と、それを自動で守る「IAM Access Analyzer」の使い方をやさしく紐解いていきます。一歩ずつ、一緒に学んでいきましょう!
—
1. なぜ「なんでもできる鍵」は危険なの?(家の防犯にたとえて解説)
想像してみてください。あなたが自分の家に住んでいて、家族や友人が遊びに来ます。
もし、家全体のマスターキーを合い鍵として配ってしまったらどうなるでしょうか?リビングに入るだけでなく、寝室の金庫も、見られたくないアルバムも、すべてその鍵一つで開けられてしまいますよね。これでは、ほんの一部の部屋だけに入ってもらいたい時でも、家全体が危険にさらされてしまいます。
AWSの「IAMポリシー」で、すべてを許可するワイルドカード(*)を使うというのは、まさに「家中のすべての部屋が開くマスターキーを、関係者全員に配っている状態」なのです。
ワイルドカードの罠
例えば、次のようなIAMポリシーを見たことはありませんか?
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
このポリシーは、「すべてのAWSサービス(*)の、すべての操作(*)を、すべてのリソース(*)に対して許可する」という、最強にして最凶の権限です。
もし、この権限がアタッチされたアプリケーションの脆弱性(泥棒の侵入経路)を悪意ある攻撃者につかれてしまったらどうなるでしょう?データベースの中身がすべて盗まれるだけでなく、勝手に高額なサーバーを何台も起動されて仮想通貨のマイニングに使われ、翌月にとんでもない請求書が届く……なんていう悪夢が現実になってしまいます。
だからこそ、「必要な人が、必要な場所だけに行ける鍵(最小権限の原則)」を渡すことが大切なのです。
—
2. 最小権限の原則をマスターしよう
最小権限の原則(Principle of Least Privilege)とは、一言で言うと「仕事をするために最低限必要な権限だけを与え、それ以外はすべて禁止する」というセキュリティの基本方針です。
先ほどの「全部OK」なポリシーから、「S3という金庫の、特定のフォルダ(バケット)の中身を見るだけ」のポリシーに書き換えてみましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject" // ファイルを「読む」権限だけを許可する
],
"Resource": "arn:aws:s3:::my-company-app-data/*" // 特定のバケットの中身だけを指定
}
]
}
これなら、万が一このアカウントが外部に漏れてしまっても、できることは「特定のファイルの閲覧」だけに限定されます。被害を最小限に食い止めることができるというわけですね。
—
3. でも、本当に必要な権限ってどうやって見極めるの?
「最小権限が大事なのは分かったけど、うちのアプリがどの権限を必要としているかなんて、イチイチ調べてられないよ!」という声が聞こえてきそうですね。そう、人間の手でこれをすべて洗い出すのは、膨大な時間がかかるし、うっかりミスも起こりやすいのです。
そこで登場するのが、AWSが提供する強力な味方「IAM Access Analyzer」です。
IAM Access Analyzerとは?
IAM Access Analyzerは、いわば「あなたの家(AWS環境)の鍵が、外の世界からどう見えているか、変な合い鍵が作られていないかをチェックしてくれる優秀な警備員さん」です。
このツールを使うと、以下のようなことができます。
1. 外部公開の検知: あなたのAWSリソース(S3やIAMロールなど)が、世界中の誰からでもアクセスできる状態になっていないかを監視する。
2. 未使用権限の特定: 「過去90日間、一度も使われていない古い権限」を見つけ出し、スリム化の提案をしてくれる。
—
4. IAM Access Analyzerを使った過剰権限の検知と削除の自動化
現場のエンジニアとしてお勧めしたいのは、このIAM Access Analyzerの機能を活用して、定期的に「使われていない無駄な鍵」を掃除する仕組みを作ることです。
ステップ1: コンソールでの有効化
まずはAWSマネジメントコンソールから「IAM Access Analyzer」を開き、「アナライザーを作成」ボタンを押すだけです。たったこれだけで、組織内のセキュリティ分析がスタートします。
ステップ2: 未使用アクセス分析の活用
Access Analyzerのメニューから「未使用のアクセス」を選択すると、次のようなレポートを確認できます。
- どのIAMロールやユーザーに、使われていない権限があるか
- 最後にその権限が使われたのはいつか
これにより、「あ、この開発用アカウント、去年のプロジェクト以来ずっと放置されてるから、この権限をごっそり削れるな」といった判断が簡単にできるようになります。
ステップ3: 自動化に向けたアプローチ(AWS CLIの活用)
セキュリティのチェックは、人間が手動でやるのではなく、定期的に自動実行するのがプロのやり方です。例えば、AWS CLIやスクリプトを組み合わせて、未使用権限のレポートを定期的に出力し、Slackなどのチャットツールに通知する仕組みを構築できます。
以下は、アクセスプレビューやポリシーの検証を行う際の基本的なAWS CLIコマンドのイメージです。
# IAM Access Analyzerのアナライザー一覧を取得するコマンド
aws accessanalyzer list-analyzers
# 特定のアナライザーで未使用アクセスの結果を生成・確認する際の構文例
# (※実際の運用では、CloudWatch Events / EventBridge と組み合わせて定期実行します)
aws accessanalyzer start-policy-generation \
--policy-generation-details '{
"principalArn": "arn:aws:iam::123456789012:role/MyApplicationRole"
}'
このように、AWSが提供するAPIを活用すれば、「誰が何の権限を本当に使っているか」のデータを集め、安全かつ効率的にポリシーをブラッシュアップしていくことが可能です。
—
まとめ:一歩ずつ、安全なクラウド環境へ
今回は、AWSのIAMポリシーにおけるワイルドカードの危険性と、最小権限の原則、そしてIAM Access Analyzerを使った過剰権限の検知について解説しました。
セキュリティ対策というと、「なんだか難しそう」「めんどくさそう」と感じてしまうかもしれません。でも、最初は次のような小さな一歩からで十分です。
1. 新しく作るポリシーで、安易に * を使わないようにする。
2. IAM Access Analyzerをポチッと有効化して、外部から丸見えになっていないか確認してみる。
3. 使っていないアカウントや権限を定期的に見直して片付ける。
あなたの丁寧なひと手間が、会社の大切なデータやシステムを守る強力な盾になります。ぜひ今日の開発から、少しだけ「鍵の管理」に気を配ってみてくださいね。
それでは、また次回のセキュリティ解説でお会いしましょう!安全で快適なクラウドライフを!
コメント