关于 implementing-aws-iam-permission-boundaries
介绍如何使用 AWS IAM 权限边界限制用户和角色的有效权限,适用于安全团队向开发者委派 IAM 资源创建,并防止权限提升。内容涵盖策略设计、部署与验证。
主要功能
- 01定义权限边界策略
- 02要求新角色附加边界
- 03防止边界被移除或修改
- 04使用 Terraform 部署
- 05验证权限提升防护
适用场景
- 01委派开发者创建 IAM 角色
- 02隔离沙盒和开发账户
- 03限制多租户角色权限
- 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 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.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 按以下顺序评估权限:
- 显式拒绝 在任何策略中 - 始终优先
- Organizations SCP - 设置组织范围的最大值
- 权限边界 - 设置实体级别的最大值
- 基于身份的策略 - 授予实际权限
- 基于资源的策略 - 跨账户访问(单独评估)
实体只有在所有适用的策略类型都允许的情况下才能执行操作。
关键使用场景
| 使用场景 | 描述 |
|---|---|
| 开发者委托 | 允许开发者创建 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