能否在AWS CodeCommit中限制用户仅从指定分支创建子分支?
需求可实现,通过IAM条件策略即可完成
这个需求完全可以实现,所谓“因无特性分支权限支持而无法实现”的观点并不准确,AWS CodeCommit通过基于条件的IAM权限策略就能精准控制分支创建的源分支范围。
具体实现方案
核心是利用CodeCommit提供的codecommit:SourceBranch条件键,在IAM权限策略中对开发用户的分支创建操作做精准限制:
- 拒绝从指定分支创建子分支:添加Deny规则,禁止用户在创建分支时将master、backup、testing作为源分支
- 允许从development分支创建子分支:添加Allow规则,仅允许用户以development作为源分支创建新分支
- 补充基础权限:确保用户拥有仓库的基础访问权限(如查看仓库、列出分支等),否则无法执行分支创建操作
以下是示例IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:ListBranches", "codecommit:GetRepository", "codecommit:GetBranch" ], "Resource": "arn:aws:codecommit:us-east-1:123456789012:repo1" }, { "Effect": "Deny", "Action": "codecommit:CreateBranch", "Resource": "arn:aws:codecommit:us-east-1:123456789012:repo1", "Condition": { "StringEquals": { "codecommit:SourceBranch": [ "refs/heads/master", "refs/heads/backup", "refs/heads/testing" ] } } }, { "Effect": "Allow", "Action": "codecommit:CreateBranch", "Resource": "arn:aws:codecommit:us-east-1:123456789012:repo1", "Condition": { "StringEquals": { "codecommit:SourceBranch": "refs/heads/development" } } } ] }
策略说明
- 第一条Statement:授予用户仓库的基础访问权限,保证用户能正常查看仓库和分支信息
- 第二条Statement:拒绝用户从master、backup、testing创建新分支,这里要注意分支的完整引用格式是
refs/heads/分支名 - 第三条Statement:仅允许用户以development为源分支创建新分支,精准满足需求
额外注意点
- 要确保开发用户的IAM角色/用户没有其他允许从任意分支创建分支的权限,否则Deny规则会被覆盖(IAM权限评估中Deny优先级高于Allow)
- 分支引用格式必须正确,CodeCommit中分支的完整路径是
refs/heads/[分支名],不能省略前缀
内容的提问来源于stack exchange,提问作者Shahroz Ahmed
相关产品推荐
相关产品推荐

