默认情况下用户可以提供代码到任何分支,这是很危险的操作,例如一名实习生向线上分支直接提交代码,接着触发了流水线直接自动上线……对其代码的质量并没有审核就上线是极其危险的
一般会限制用户只能往特定的分支提交代码(例如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分支