mcpField
I
implementing-aws-iam-permission-boundaries

implementing-aws-iam-permission-boundaries

github.com/mukul975セキュリティ35.2k60 回インストール8 週間前に更新
リポジトリ

implementing-aws-iam-permission-boundaries について

AWS IAM のアクセス許可境界でユーザーやロールの実効権限を制限するためのセキュリティスキルです。IAM リソース作成を開発者に委任する際のポリシー設計、デプロイ、権限昇格対策の検証を扱います。

主な機能

  1. 01アクセス許可境界ポリシーの定義
  2. 02新規ロールへの境界適用
  3. 03境界の削除・変更の防止
  4. 04Terraform によるデプロイ
  5. 05権限昇格対策の検証

活用シーン

  1. 01開発者への IAM ロール作成の委任
  2. 02サンドボックス・開発アカウントの分離
  3. 03マルチテナントロールの権限制限
  4. 04CI/CD 自動化ロールの制約

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill implementing-aws-iam-permission-boundaries

インストール後、Claude Code で/implementing-aws-iam-permission-boundariesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

AWS IAM 権限境界の実装

概要

IAM 権限境界は、ID ベースのポリシーが IAM エンティティ(ユーザーまたはロール)に付与できる権限の上限を定める、AWS の高度な機能です。これにより、特権昇格のリスクを伴わずに、セキュリティチームがアプリケーション開発者へ IAM ロールやポリシーの作成を安全に委任できます。エンティティの実効権限は、その ID ベースのポリシーと権限境界の共通部分です。ID ポリシーで AdministratorAccess が付与されていても、権限境界によって許可されたアクションのみに制限されます。

使用する場面

  • 環境に AWS IAM 権限境界の機能をデプロイまたは設定する場合
  • コンプライアンス要件に沿ったセキュリティ制御を確立する場合
  • この分野のセキュリティアーキテクチャを構築または改善する場合
  • この実装が必要なセキュリティ評価を実施する場合

前提条件

  • IAM 管理者アクセス権を持つ AWS アカウント
  • AWS IAM ポリシー言語(JSON)の知識
  • 適切な認証情報で設定された AWS CLI v2
  • Infrastructure as Code によるデプロイ用の Terraform または CloudFormation

基本概念

権限境界の仕組み
Identity-Based Policy          Permission Boundary
(What the role CAN do)    ∩    (What the role MAY do)
        │                              │
        └──────────┬───────────────────┘
                   │
          Effective Permissions
    (Only actions in BOTH policies)
ポリシー評価ロジック

AWS は次の順序で権限を評価します。

  1. ポリシー内の 明示的な拒否 — 常に優先されます
  2. Organizations SCP — 組織全体の上限を定めます
  3. 権限境界 — エンティティ単位の上限を定めます
  4. ID ベースのポリシー — 実際の権限を付与します
  5. リソースベースのポリシー — アカウント間アクセス(別途評価されます)

エンティティがアクションを実行できるのは、該当するすべての種類のポリシーで許可されている場合のみです。

主なユースケース
ユースケース説明
開発者への委任開発者が権限境界を超えて特権を昇格することなく IAM ロールを作成できるようにします
サンドボックスの分離サンドボックス/開発アカウントでロールが実行できる操作を制限します
マルチテナントワークロードテナント固有のロールが他のテナントのリソースにアクセスできないようにします
CI/CD パイプラインのロール自動化ロールを特定のサービスに制限します

ワークフロー

ステップ 1:権限境界ポリシーを定義する

許可する権限の上限を定める管理ポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowedServices",
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "dynamodb:*",
                "lambda:*",
                "logs:*",
                "cloudwatch:*",
                "sqs:*",
                "sns:*",
                "events:*",
                "states:*",
                "xray:*",
                "ec2:Describe*",
                "ec2:CreateTags",
                "sts:AssumeRole",
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIAMPassRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/app-*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "lambda.amazonaws.com",
                        "states.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "DenyBoundaryDeletion",
            "Effect": "Deny",
            "Action": [
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:CreatePolicyVersion"
            ],
            "Resource": "arn:aws:iam::*:policy/DeveloperBoundary"
        },
        {
            "Sid": "DenyBoundaryRemoval",
            "Effect": "Deny",
            "Action": [
                "iam:DeleteUserPermissionsBoundary",
                "iam:DeleteRolePermissionsBoundary"
            ],
            "Resource": "*"
        }
    ]
}
ステップ 2:開発者への委任ポリシーを作成する

開発者に IAM ロールの作成を許可します。ただし、権限境界を必ずアタッチするようにします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCreateRoleWithBoundary",
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:PutRolePolicy",
                "iam:DeleteRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/app-*",
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::*:policy/DeveloperBoundary"
                }
            }
        },
        {
            "Sid": "AllowCreatePolicyScoped",
            "Effect": "Allow",
            "Action": [
                "iam:CreatePolicy",
                "iam:DeletePolicy",
                "iam:CreatePolicyVersion",
                "iam:DeletePolicyVersion"
            ],
            "Resource": "arn:aws:iam::*:policy/app-*"
        },
        {
            "Sid": "AllowViewIAM",
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*"
            ],
            "Resource": "*"
        }
    ]
}
ステップ 3:権限境界をアタッチする
# Create the boundary policy
aws iam create-policy \
    --policy-name DeveloperBoundary \
    --policy-document file://developer-boundary.json

# Attach boundary to an existing role
aws iam put-role-permissions-boundary \
    --role-name developer-role \
    --permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary

# Create a new role with boundary
aws iam create-role \
    --role-name app-lambda-executor \
    --assume-role-policy-document file://trust-policy.json \
    --permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary
ステップ 4:特権昇格を防止する

開発者が次の操作を行えないよう、権限境界に拒否ステートメントを含める必要があります。

  • 自分のロールから権限境界を削除する
  • 権限境界ポリシー自体を変更する
  • 権限境界をアタッチせずにロールを作成する
  • 特権昇格につながる IAM サービスにアクセスする
ステップ 5:Terraform でデプロイする
resource "aws_iam_policy" "developer_boundary" {
  name   = "DeveloperBoundary"
  path   = "/"
  policy = file("${path.module}/policies/developer-boundary.json")
}

resource "aws_iam_role" "app_role" {
  name                 = "app-lambda-executor"
  assume_role_policy   = data.aws_iam_policy_document.lambda_trust.json
  permissions_boundary = aws_iam_policy.developer_boundary.arn
}

検証チェックリスト

  • 権限境界ポリシーを作成し、セキュリティチームがレビューした
  • 自己変更を防止する拒否ステートメントが権限境界に含まれている
  • 開発者への委任ポリシーで、新しいロールすべてに権限境界を必須としている
  • ロールの命名規則(例:app-* プレフィックス)を適用している
  • 開発者が権限境界あり/なしでロールを作成できるかテストした(権限境界なしでは失敗すること)
  • 特権昇格の経路をテストし、遮断している
  • IAM API 呼び出しに対する CloudTrail ロギングを有効にしている
  • 権限境界ポリシーをソース管理でバージョン管理している
  • 自動テストで権限境界の有効性を検証している
  • 開発チームにドキュメントを提供している

参考資料

コメント