Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDKにおけるPermissions Boundaryの適用と運用時の課題

Avatar for ikngm ikngm
November 08, 2025
440

CDKにおけるPermissions Boundaryの適用と運用時の課題

Avatar for ikngm

ikngm

November 08, 2025
Tweet

Transcript

  1. アジェンダ 3 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  2. アジェンダ 4 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  3. Permissions Boundary 7 • 日本語で「権限の境界」 • Permissions Boundary自体は権限を付与しない • Identity-based

    policyと合わせて利用する • 権限の最大範囲を設定できる Permissions Boundary Identity-based policy
  4. アジェンダ 8 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  5. IAMエンティティに境界を設ける方法 10 • SCP (Service Control Policy) • Permissions Boundary

    AWS account SCP User Permissions Boundary Role アカウント に適用
  6. AWS account IAMエンティティに境界を設ける方法 11 • SCP (Service Control Policy) •

    Permissions Boundary SCP User Permissions Boundary Role IAMエンティティ に適用
  7. アジェンダ 12 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  8. Permissions Boundaryを利用した背景 13 • ゲートキーパー • 境界防御 • 事前承認 •

    一元管理 • ガードレール • はみ出してはいけない境界を定める • 境界内で自由に動く
  9. Permissions Boundaryを利用した背景 14 • ゲートキーパー • 境界防御 • 事前承認 •

    一元管理 • ガードレール • はみ出してはいけない境界を定める • 境界内で自由に動く 開発スピードの阻害 ボトルネックになりやすい
  10. Permissions Boundaryを利用した背景 15 • ゲートキーパー • 境界防御 • 事前承認 •

    一元管理 • ガードレール • はみ出してはいけない境界を定める • 境界内で自由に動く 自律性を保ちながら 安全性を確保 開発スピードの阻害 ボトルネックになりやすい
  11. Permissions Boundaryを利用した背景 16 • ゲートキーパー • 境界防御 • 事前承認 •

    一元管理 • ガードレール • はみ出してはいけない境界を定める • 境界内で自由に動く 「開発スピード」×「セキュリティ担保」を実現するためには ガードレールの考え方が重要 自律性を保ちながら 安全性を確保 ※文脈としては、ゲートキーパーだけでは開発スピードを阻害するため、 基本をガードレールとし、局面によってゲートキーパーで押さえる、のように併用するイメージ 開発スピードの阻害 ボトルネックになりやすい
  12. アジェンダ 20 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  13. CDKに関連するロール 22 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential ECR

    S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy
  14. 1. CDKが使うロール 23 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy 用途ごとに5種類 Bootstrapにて作成
  15. 2. CDK利用者が作るロール 24 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy Lambda等に 付与するロール
  16. 3. CDKが暗黙的に作るロール 25 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy CloudFormation カスタムリソース用Role 【例】 aws_s3.Bucketコンストラクトの autoDeleteObjectsをtrueにすると CloudFormationカスタムリソースとして LambdaとRoleが作成される
  17. アジェンダ 26 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  18. 1. CDKが使うロール 28 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy 用途ごとに5種類 Bootstrapにて作成
  19. 1. CDKが使うロール 29 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ① Bootstrapオプション cdk bootstrap --custom-permissions-boundary policy-name
  20. 1. CDKが使うロール 30 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ② Bootstrapテンプレートをカスタマイズ cdk bootstrap --template custom-template.yaml
  21. 2. CDK利用者が作るロール 31 ① 個々のIAMエンティティへ適用 ② グローバルにCDKアプリ全体へ適用 new aws_iam.Role(this, 'Role',

    { assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'), permissionsBoundary: iam.ManagedPolicy.fromManagedPolicyName(this, 'Policy', 'policy-name'), }); { "context": { "@aws-cdk/core:permissionsBoundary": { "name": “policy-name" } } } new App({ context: { [PERMISSIONS_BOUNDARY_CONTEXT_KEY]: { name: ' policy-name', }, }, }); cdk.json Appコンストラクター
  22. 2. CDK利用者が作るロール 32 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ※説明用に Role2個作成 する例に変更
  23. 2. CDK利用者が作るロール 33 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ① 個々のIAMエンティティへ適用 new aws_iam.Role(this, 'Role', { assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'), permissionsBoundary: iam.ManagedPolicy.fromManagedPolicyName(this, 'Policy', 'policy-name'), });
  24. 2. CDK利用者が作るロール 34 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ② グローバルにCDKアプリ全体へ適用 { "context": { "@aws-cdk/core:permissionsBoundary": { "name": “policy-name" } } } new App({ context: { [PERMISSIONS_BOUNDARY_CONTEXT_KEY]: { name: ' policy-name', }, }, });
  25. 2. CDK利用者が作るロール 35 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ② グローバルにCDKアプリ全体へ適用 { "context": { "@aws-cdk/core:permissionsBoundary": { "name": “policy-name" } } } new App({ context: { [PERMISSIONS_BOUNDARY_CONTEXT_KEY]: { name: ' policy-name', }, }, }); ※グローバルだけど 「CDKが暗黙的に作るロール」には適用されない
  26. 3. CDKが暗黙的に作るロール 36 ① Aspects import { Aws, IAspect, aws_iam

    as iam } from 'aws-cdk-lib'; import { IConstruct } from 'constructs'; export class PermissionsBoundaryAspect implements IAspect { public visit(node: IConstruct): void { if (node instanceof iam.CfnRole) { node.addPropertyOverride('PermissionsBoundary', `arn:${Aws.PARTITION}:iam::${Aws.ACCOUNT_ID}:policy/policy-name`, ); } } } Aspects.of(app).add(new PermissionsBoundaryAspect()); lib/aspect.ts bin/app.ts
  27. 3. CDKが暗黙的に作るロール 37 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy CloudFormation カスタムリソース用Role 【例】 aws_s3.Bucketコンストラクトの autoDeleteObjectsをtrueにすると CloudFormationカスタムリソースとして LambdaとRoleが作成される
  28. 3. CDKが暗黙的に作るロール 38 ImagePublishing Deployment Action FilePublishing Lookup IAM Credential

    ECR S3 CloudFormation CloudFormation Execution Contextとして 参照するリソース User AssumeRole AssumeRole AssumeRole AssumeRole PassRole Deploy ① Aspects import { Aws, IAspect, aws_iam as iam } from 'aws-cdk-lib'; import { IConstruct } from 'constructs'; export class PermissionsBoundaryAspect implements IAspect { public visit(node: IConstruct): void { if (node instanceof iam.CfnRole) { node.addPropertyOverride('PermissionsBoundary', `arn:${Aws.PARTITION}:iam::${Aws.ACCOUNT_ID}:policy/policy-name`, ); } } } Aspects.of(app).add(new PermissionsBoundaryAspect());
  29. Custom Resource • crossRegionReference Custom Resource us-east-1 ap-northeast-1 Stack Stack

    3. CDKが暗黙的に作るロール(例外) 40 Parameter Store Role CloudFront WAF Exports Writer Exports Reader Role 書き込み インポート済 タグ付与 参照 ARN取得 リージョンを跨いで スタック間の値を参照する方法
  30. Custom Resource • crossRegionReference Custom Resource us-east-1 ap-northeast-1 Stack Stack

    3. CDKが暗黙的に作るロール(例外) 41 Parameter Store CloudFront WAF Exports Writer Exports Reader 書き込み インポート済 タグ付与 参照 CloudFormation カスタムリソース用Role Role Role CloudFormation カスタムリソース用Role ARN取得
  31. Custom Resource ARN取得 Custom Resource • crossRegionReference us-east-1 ap-northeast-1 Stack

    Stack 3. CDKが暗黙的に作るロール(例外) 42 Parameter Store CloudFront WAF Exports Writer Exports Reader 書き込み インポート済 タグ付与 参照 Role Role CloudFormation カスタムリソース用Role CloudFormation カスタムリソース用Role Aspectsでも適用できない Aspectsでも適用できない
  32. アジェンダ 45 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  33. • 最大限許可した上で必要最小限の拒否をリストアップ ブラックリスト方式 48 [Allow] Admin [Deny] Permissions Boundary identity-based

    policy [Allow] PowerUser+IAM Full ユーザに許可する操作 以下を拒否 ① PB無しロール/ユーザ作成 ② PB自体の削除/解除 ③ その他管理者が制限したい操作
  34. ブラックリスト方式(一部抜粋) 49 • Permissions Boundary有りロールだけ作成可とする - Sid: AllowAdminAccess Effect: Allow

    Action: '*' Resource: ‘*’ - Sid: DenyCreateOrChangeRoleWithoutBoundary Effect: Deny Action: - iam:CreateRole - iam:AttachRolePolicy - iam:DetachRolePolicy - iam:PutRolePolicy - iam:DeleteRolePolicy - iam:PutRolePermissionsBoundary Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/* Condition: StringNotEquals: iam:PermissionsBoundary: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${BoundaryPolicyName}
  35. ブラックリスト方式(一部抜粋) 50 • Permissions Boundary有りロールだけ作成可とする - Sid: AllowAdminAccess Effect: Allow

    Action: '*' Resource: ‘*’ - Sid: DenyCreateOrChangeRoleWithoutBoundary Effect: Deny Action: - iam:CreateRole - iam:AttachRolePolicy - iam:DetachRolePolicy - iam:PutRolePolicy - iam:DeleteRolePolicy - iam:PutRolePermissionsBoundary Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/* Condition: StringNotEquals: iam:PermissionsBoundary: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${BoundaryPolicyName} 全て許可 Permissions Boundary無しロール作成を拒否
  36. ブラックリスト方式の問題点 52 • PassRoleとは • AWSサービスにロールを渡すことができる権限 • PassRoleだけでは何もできない(API呼出ではない) Administorator User

    Permissions Boundary Role Create Lambda { "Effect": "Deny", "Action": [ "iam:PassRole" ], "Resource": [ "*" ] } PassRole権限が無いと AdminでもLambdaが作成 できない ⇒リソース作成権限に加えて PassRoleが必要
  37. ブラックリスト方式の問題点 53 • PassRoleアクションは条件キーでPermissions Boundary を指定できない - Sid: DenyPassRoleWithoutBoundary Effect:

    Deny Action: - iam:PassRole Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/* Condition: StringNotEquals: iam:PermissionsBoundary: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${BoundaryPolicyName}
  38. ブラックリスト方式の問題点 54 • PassRoleアクションは条件キーでPermissions Boundary を指定できない - Sid: DenyPassRoleWithoutBoundary Effect:

    Deny Action: - iam:PassRole Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/* Condition: StringNotEquals: iam:PermissionsBoundary: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${BoundaryPolicyName}
  39. PassRoleをどう制限するか 55 No 対応案 メリット デメリット 1 Roleのパスを利用する アプリごとのPBが不要 Role再作成+差替が必要(※)

    2 リソース名にアプリ識別子が含まれ るものを制限対象とする Role再作成+差替が不要(※) アプリごとのPBが必要 3 開発者以外によって作成された ロールに対する操作をホワイトリス ト形式でDENYする ・アプリごとのPBが不要 ・Role再作成+差替が不要(※) リストアップしきれない、増減した ときに追随しきれない可能性あり ※Roleのパスは新規作成時しか指定できない⇒既存アプリの場合、Role再作成+差替が必要になる
  40. PassRoleをどう制限するか 56 No 対応案 メリット デメリット 1 Roleのパスを利用する アプリごとのPBが不要 Role再作成+差替が必要(※)

    2 リソース名にアプリ識別子が含まれ るものを制限対象とする Role再作成+差替が不要(※) アプリごとのPBが必要 3 開発者以外によって作成された ロールに対する操作をホワイトリス ト形式でDENYする ・アプリごとのPBが不要 ・Role再作成+差替が不要(※) リストアップしきれない、増減した ときに追随しきれない可能性あり 新規アプリに適用 既存アプリに適用 ※Roleのパスは新規作成時しか指定できない⇒既存アプリの場合、Role再作成+差替が必要になる
  41. PassRoleをどう制限するか 57 • Roleのパスを利用する - Sid: AllowPassRoleForApp Effect: Allow Action:

    - iam:PassRole Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/app/* デフォルト : /policy-name 開発者用のパスを設ける : /app/policy-name
  42. • IAM以外を許可 • IAMはホワイトリストで許可 • その他制限したい操作をブラックリストで拒否 ハイブリッド方式 58 [Allow] PowerUser+IAM

    Full Permissions Boundary identity-based policy [Deny] [Allow] IAM以外 ユーザに許可する操作 [Deny] [Allow] IAMのみ Permissions Boundary
  43. アジェンダ 59 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ
  44. アジェンダ 62 1. 本日のキーワード 2. IAMエンティティに境界を設ける方法 3. Permissions Boundaryを利用した背景 4.

    CDKに関連するロール 5. CDKへのPermissions Boundary適用方法 6. Permissions Boundary適用パターン 7. AWSアカウントという境界 8. まとめ