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. 04使用 Terraform 部署
  5. 05验证权限提升防护

适用场景

  1. 01委派开发者创建 IAM 角色
  2. 02隔离沙盒和开发账户
  3. 03限制多租户角色权限
  4. 04约束 CI/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 权限边界是一项高级 AWS 功能,用于设定基于身份的策略可以授予 IAM 实体(用户或角色)的最大权限。它使集中式安全团队能够安全地将 IAM 角色和策略的创建权限委托给应用程序开发者,而无需冒权限提升的风险。实体的有效权限是其基于身份的策略与其权限边界的交集——即使身份策略授予了 AdministratorAccess,权限边界也会将其限制为仅允许的操作。

何时使用

  • 在环境中部署或配置实施 AWS IAM 权限边界功能时
  • 建立符合合规要求的安全控制时
  • 为该领域构建或改进安全架构时
  • 进行需要此实施的安全评估时

先决条件

  • 具有 IAM 管理访问权限的 AWS 账户
  • 了解 AWS IAM 策略语言(JSON)
  • 已配置适当凭证的 AWS CLI v2
  • 用于基础设施即代码部署的 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. 基于身份的策略 - 授予实际权限
  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 日志记录
  • 边界策略已在源代码控制中进行版本管理
  • 自动化测试验证边界的有效性
  • 已向开发团队提供文档

参考资料

评论

支持 Markdown