默认情况下用户可以提供代码到任何分支,这是很危险的操作,例如一名实习生向线上分支直接提交代码,接着触发了流水线直接自动上线……对其代码的质量并没有审核就上线是极其危险的
一般会限制用户只能往特定的分支提交代码(例如dev、test),由比较资深的工程师review并合到master或prod分支并上线。所以这就引出了对分支的权限控制
在CodeCommit
中,实现对分支的保护是通过IAM权限来控制的。
本节我们创建一个用户组,在这个用户组里对特定分支的权限进行控制,然后把需要限制的用户列表加到这个用户组里
在IAM页面,创建一个新的用户组:
命名为CannotPushToMaster
,把当前使用的git用户添加到这个用户组(当然也可以创建完用户组后再添加):
创建用户组完成后,添加一条内联策略:
参考文档如何对特定分支进行限制: https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html
文档中的策略是这么写的,使用Deny
策略禁止用户对master分支的一些操作(Push、Delete
等):
{
"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:codecommit:us-east-2:111111111111:MyDemoRepo",
"Condition": {
"StringEqualsIfExists": {
"codecommit:References": [
"refs/heads/master",
"refs/heads/prod"
]
},
"Null": {
"codecommit:References": false
}
}
}
]
}
这里为了方便,我们使用星号直接匹配所有库:
进入下一步,输入策略的名称,点击创建:
向master分支重新提交代码,发现master分支禁止当前用户提交:
用户需要创建一个新的分支,在里面开发并提交:
查看CodeCommit的控制台,能刷新到新的分支的提交:
当实习生提交代码到dev
分支后,需要资深的工程师来将代码合并,此时需要创建pull request
:
将dev分支的更新合并到master:
点击Create pull request
:
然后进行合并:
完成后,新开发的功能就合并到master分支