You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS IAM策略管控带Owner标签的CodeCommit仓库权限

解决AWS CodeCommit仓库Owner标签锁定策略问题

你的核心需求是:仅当仓库存在Owner标签且操作用户与标签值不匹配时,才拒绝主分支推送/合并及仓库编辑操作。原策略的问题在于,当仓库没有Owner标签时,StringNotEqualsIgnoreCase条件会被判定为true(空值与任何用户名都不相等),导致所有用户被拒绝操作。

以下是调整后的完整IAM策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LockMasterProductionBranches",
            "Effect": "Deny",
            "Action": [
                "codecommit:GitPush",
                "codecommit:DeleteBranch",
                "codecommit:PutFile",
                "codecommit:MergeBranchesByFastForward",
                "codecommit:MergeBranchesBySquash",
                "codecommit:MergeBranchesByThreeWay",
                "codecommit:MergePullRequestByFastForward",
                "codecommit:MergePullRequestBySquash",
                "codecommit:MergePullRequestByThreeWay"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/master",
                        "refs/heads/prod"
                    ]
                },
                "Null": {
                    "codecommit:References": "false",
                    "aws:ResourceTag/Owner": "false"
                },
                "StringNotEqualsIgnoreCase": {
                    "aws:ResourceTag/Owner": "${aws:username}"
                }
            }
        },
        {
            "Sid": "LockRepo",
            "Effect": "Deny",
            "Action": [
                "codecommit:UpdateDefaultBranch",
                "codecommit:CreatePullRequestApprovalRule",
                "codecommit:DeletePullRequestApprovalRule",
                "codecommit:OverridePullRequestApprovalRules",
                "codecommit:UpdatePullRequestApprovalRuleContent",
                "codecommit:DeleteRepository",
                "codecommit:UpdateRepositoryDescription",
                "codecommit:UpdateRepositoryName",
                "codecommit:TagResource",
                "codecommit:UntagResource",
                "codecommit:PutRepositoryTriggers"
            ],
            "Resource": "*",
            "Condition": {
                "Null": {
                    "aws:ResourceTag/Owner": "false"
                },
                "StringNotEqualsIgnoreCase": {
                    "aws:ResourceTag/Owner": "${aws:username}"
                }
            }
        }
    ]
}

关键调整说明

  • 强制Owner标签存在性:在两个Statement的Condition中加入"Null": {"aws:ResourceTag/Owner": "false"},这个条件要求仓库必须存在Owner标签(标签值不为null),否则整个Condition判定为false,不会触发Deny。
  • 保留分支操作限制:第一个Statement中关于codecommit:References的条件保持不变,确保仅针对master/prod分支生效。
  • 逻辑与条件组合:IAM策略的Condition默认是逻辑与关系,只有所有条件同时满足时才执行Deny操作,刚好匹配你要求的「仓库有Owner标签且用户与标签不匹配」的拒绝前提。

内容的提问来源于stack exchange,提问作者Cailean Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:32:22