修正AWS CodeCommit IAM策略以阻止分支/仓库删除操作
修正后的IAM策略及说明
问题根源
你当前的策略只限制了codecommit:DeleteBranch API动作,但通过git push origin --delete命令删除分支时,实际触发的是codecommit:GitPush动作(本质是推送空引用覆盖目标分支),因此原策略无法拦截该操作。
修正后的策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codecommit:*", "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo" }, { "Effect": "Deny", "Action": [ "codecommit:DeleteBranch", "codecommit:GitPush" ], "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "Condition": { "ForAnyValue:StringEquals": { "codecommit:References": "refs/heads/*" }, "Null": { "codecommit:DeletedReferences": "false" } } }, { "Effect": "Deny", "Action": "codecommit:DeleteRepository", "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo" } ] }
策略说明
- 允许所有CodeCommit操作:保留原有的
Allow语句,确保除被禁止的删除操作外,其他所有操作正常执行。 - 拦截分支删除的两种场景:
- 禁止
codecommit:DeleteBranchAPI动作,防止通过AWS控制台或CLI直接删除分支。 - 禁止带删除引用的
codecommit:GitPush动作:通过codecommit:DeletedReferences条件判断是否为删除分支的推送操作,匹配所有分支(refs/heads/*)。
- 禁止
- 拦截仓库删除:新增
codecommit:DeleteRepository的禁止语句,防止删除整个CodeCommit仓库。
验证步骤
- 尝试通过
git push origin --delete <分支名>执行删除,应收到权限拒绝提示。 - 尝试通过AWS CLI执行
aws codecommit delete-branch --repository-name MyDemoRepo --branch-name <分支名>,同样会被拒绝。 - 测试其他操作(如
git push、创建分支、提交代码等),确认可正常执行。
内容的提问来源于stack exchange,提问作者Venkatesh Gorige
相关产品推荐
相关产品推荐

