You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

IAM权限管控:限制管理员用户创建影响特定S3资源的策略

IAM权限管控:限制管理员用户创建影响特定S3资源的策略

这个问题踩中了IAM权限设计里的典型坑——给管理员开放IAM权限的同时,又要防止他们绕过已有的资源访问限制,确实得仔细打磨权限规则才行。我之前帮不少客户处理过类似场景,这里有两个可行的方案,还有一些最佳实践可以参考:

方案一:用IAM权限边界(Permission Boundary)锁死最大权限范围

权限边界是AWS专门用来限制用户/角色能拥有的最大权限的机制,哪怕用户有IAM权限去创建或修改自己的策略,最终的有效权限也绝对突破不了这个边界,这应该是最稳妥的解法:

  1. 先把原来的「S3全权限排除CloudTrail桶」的策略改造成权限边界策略,示例如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::your-cloudtrail-bucket",
                "arn:aws:s3:::your-cloudtrail-bucket/*"
            ]
        }
    ]
}
  1. 把这个策略设置为管理员用户组内所有用户的权限边界。这样一来,哪怕他们用IAM权限给自己加了访问CloudTrail桶的策略,权限边界会直接覆盖这个操作,最终还是无法访问该桶。

方案二:细化IAM权限,禁止创建包含特定资源的策略

如果不想用权限边界,也可以直接收紧他们的IAM权限——别给iam:*全权限,而是精确控制他们能创建/修改的策略内容,用条件键拦截包含目标桶的策略:

可以创建这样一个IAM策略,替换原来的「全IAM访问」策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:PutUserPolicy",
                "iam:PutGroupPolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "iam:PolicyDocument": "*arn:aws:s3:::your-cloudtrail-bucket*"
                }
            }
        },
        // 按需添加其他必需的IAM操作,比如管理用户、角色等,避免开放过高权限
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateUser",
                "iam:AddUserToGroup"
            ],
            "Resource": "*"
        }
    ]
}

这个策略的核心是用iam:PolicyDocument条件键检查他们创建/修改的策略内容,如果里面包含了CloudTrail桶的ARN,就直接拒绝操作。不过要注意,这种方式需要覆盖所有可能创建/修改策略的IAM操作,容易有遗漏,所以可靠性不如权限边界。

额外的最佳实践

  • 如果你的AWS环境用了Organizations,可以在组织层面创建SCP(服务控制策略),直接限制所有账户对这个CloudTrail桶的访问。这种上层控制优先级更高,哪怕单个账户的IAM权限有漏洞,SCP也能拦住。
  • 尽量遵循最小权限原则:管理员不需要「全IAM访问」,只给他们完成工作必需的IAM操作权限,比如创建普通用户、管理常规策略等,避免开放过高权限。
  • 开启CloudTrail的日志监控,专门跟踪针对这个CloudTrail桶的权限变更操作,一旦有异常可以及时告警。

备注:内容来源于stack exchange,提问作者Jamie Forrest

火山引擎 最新活动