场景
需要保护特定的主干分支,防止初级开发人员直接提交变更到主干分支。主干分支的代码必须由架构组成员进行审核。
思路
创建一个自定义分支保护策略,防止用户自己对需要保护的主干分支进行commit。由了这个策略后,将这个自定义分支保护策略和AWSCodeCommitPowerUser策略添加到开发用户组。将AWSCodeCommitFullAccess策略添加到架构用户组。
这样就可以实现开发组不能自己对主干分支进行commit,只能发起合并请求给架构组,架构组对这个合并请求进行代码审核和合并处理。
步骤
这里假设开发组和架构组已经创建好了。
创建自定义策略
在IAM的策略中,选择创建策略,策略内容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"codecommit:GitPush",
"codecommit:DeleteBranch",
"codecommit:PutFile",
"codecommit:MergeBranchesByFastForward",
"codecommit:MergeBranchesBySquash",
"codecommit:MergeBranchesByThreeWay",
"codecommit:MergePullRequestByFastForward",
"codecommit:MergePullRequestBySquash",
"codecommit:MergePullRequestByThreeWay"
],
"Resource": "arn:aws-cn:codecommit:*:111111111111:*",
"Condition": {
"StringEqualsIfExists": {
"codecommit:References": [
"refs/heads/main",
"refs/heads/prod",
"refs/heads/master"
]
},
"Null": {
"codecommit:References": "false"
}
}
}
]
}
这里被保护的分支是main,prod,master.
这里主要难点就是Resource
的值,可以先用web界面先获取一个,然后再尝试改成自己的。不要理会gui的报错,自己提交创建错误。
策略名称:DenyChangesToMain
用户组设置策略
开发组设置的策略如下:
- DenyChangesToMain
- AWSCodeCommitPowerUser
开发组虽然有AWSCodeCommitPowerUser策略,这个策略许可能够提交到保护分支,但是,DenyChangesToMain的拒绝策略的优先更高。
这就能够实现分支保护的主要原因。
架构组设置的策略如下: - AWSCodeCommitFullAccess
总结
这样设置之后,就可以使用Code Commit的分支保护了。这个相比其他代码托管,主要是通过json配置出来的。其他代码托管可以自己通过gui操作。