[IAMスペシャル!]Security-JAWS 第39回に登壇しました『CDKにおけるPermissions Boundaryの適用と運用時の課題』

こんにちは、エヌデーデーの池ノ上です。

11/8(土)に開催された [IAMスペシャル!]Security-JAWS 第39回 に登壇させていただきましたので、セッション資料を公開いたします。

セッション資料

セッション動画

要約

NotebookLMによる要約です。

1. キーワードと背景

主要なキーワード

  • CDK: プログラミング言語でAWSリソースを定義し、CloudFormationを通じてプロビジョニングするオープンソースのフレームワーク
  • Permissions Boundary (PB): 「権限の境界」を意味し、これ自体は権限を付与しないが、Identity-based policyと組み合わせて利用することで、権限の最大範囲を設定できる
  • 境界を設ける方法:
  • SCP (Service Control Policy): AWSアカウントに適用
  • Permissions Boundary: IAMユーザーやロールに適用

PBの利用背景

目的: 「開発スピード」と「セキュリティ担保」の両立

従来のゲートキーパー方式の問題点
  • 事前承認、一元管理が必要
  • 開発スピードを阻害
  • ボトルネックになりやすい
ガードレール方式のメリット
  • はみ出してはいけない境界を定める
  • 境界内で自由に動ける
  • 自律性を保ちながら安全性を確保
実現したかった構成
  • 管理者がアプリに必要な制限を設定
  • 開発者がアプリに必要なロールを自身で作成可能
  • 権限昇格ができない

2. CDKに関連するロールとPBの適用方法

CDKに関連する3種類のロール

1. CDKが使うロール
  • 初期セットアップ(Bootstrap)で作成される5種類のロール
  • 例: CloudFormation Executionロール

適用方法:

  • cdk bootstrap実行時にオプション(--custom-permissions-boundary)で指定
  • Bootstrapテンプレートをカスタマイズ
2. CDK利用者が作るロール
  • Lambdaなどに付与するロール

適用方法:

  • 個々のIAMエンティティに直接適用
  • cdk.jsonやAppコンストラクターのコンテキストでグローバルにCDKアプリ全体へ適用
3. CDKが暗黙的に作るロール
  • CloudFormationカスタムリソース用のロールなど

適用方法:

  • Aspectsを利用: 明示的に作成されたロールと暗黙的に作成されたロールの区別なく、一律でPBを適用可能

運用時の課題と例外

CrossRegionReferenceの問題:

  • リージョンを跨いでスタック間の値を参照する機能によって暗黙的に作られるカスタムリソース用ロールには、Aspectsを使ってもPBを適用できない
  • GitHubのIssueで未解決
  • 回避策: Permissions Boundary未設定ロールに対してPBを設定するベーススタッククラスの利用

適用方法のシンプルさ比較

方法シンプル度CDK利用者が作るロールCDKが暗黙的に作るロールCrossRegion Reference
cdk.json⚪︎
Aspects⚪︎⚪︎
回避策⚪︎⚪︎⚪︎

3. Permissions Boundary適用パターンの課題と解決策

ブラックリスト方式(当初の試み)

アプローチ:

  • 最大限(AdminやPowerUser+IAM Full)を許可
  • 必要最小限の拒否事項をリストアップ
  • PBなしロールの作成禁止
  • PB自体の削除禁止など

重大な問題点:

  • iam:PassRoleアクションは、条件キーでPermissions Boundaryを指定することができない
  • PassRoleは、AWSサービスにロールを渡すために必要な権限
  • 適切に制限できないとセキュリティ担保が困難

PassRoleの制限策

ロールのパスを利用する方法:

  • ロール作成時にパスを設定
  • 特定のパス(例: /app/*)を持つロールのみPassRoleを許可
  • メリット: 新規アプリには有効
  • デメリット: 既存アプリにはロールの再作成と差し替えが必要

ハイブリッド方式(改善策)

アプローチ:

  • IAM以外を許可
  • IAMについては個別にホワイトリストで許可
  • その他制限したい操作をブラックリストで拒否

4. まとめ

得られた知見

  • CDKでPBを適用し始めたところ、多くの壁にぶつかった
  • PBの運用は容易ではない
  • 未だに最善策はわかっていない
  • IAMは奥が深い

代替アプローチ

  • AWSアカウントという境界を利用: SCPでアカウント外から制限を加える構成がシンプルでバランスが取れている
  • 重要: 場面に応じて、SCPやPBといった境界防御の方式を使い分けることが重要

感想

半日かけて総勢13名が様々な角度からIAMをテーマに発表を行うとても興味深いイベントでした。IAMはAWSを利用するうえで必ず付いて回る重要な要素で、多くの学びがある会でした。運営のみなさま、ありがとうございました。

私も自身の発表の準備を通して、これまでいろいろと苦闘してきたPermissions Boundaryについて、まだまだ最善策はわからないものの、いったん現時点の理解を整理できたような気がしており、良い機会になりました。