保护master分支

默认情况下用户可以提供代码到任何分支,这是很危险的操作,例如一名实习生向线上分支直接提交代码,接着触发了流水线直接自动上线……对其代码的质量并没有审核就上线是极其危险的
一般会限制用户只能往特定的分支提交代码(例如dev、test),由比较资深的工程师review并合到master或prod分支并上线。所以这就引出了对分支的权限控制

限制用户访问Master分支

CodeCommit中,实现对分支的保护是通过IAM权限来控制的。
本节我们创建一个用户组,在这个用户组里对特定分支的权限进行控制,然后把需要限制的用户列表加到这个用户组里


在IAM页面,创建一个新的用户组:

image-20221003093859435

命名为CannotPushToMaster,把当前使用的git用户添加到这个用户组(当然也可以创建完用户组后再添加):

image-20221003094011689

创建用户组完成后,添加一条内联策略:

image-20221003094043453

文档中的策略是这么写的,使用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
                }
            }
        }
    ]
}

这里为了方便,我们使用星号直接匹配所有库:

image-20221003094301201

进入下一步,输入策略的名称,点击创建:

image-20221003094337008

测试

向master分支重新提交代码,发现master分支禁止当前用户提交:

image-20221003094441936

用户需要创建一个新的分支,在里面开发并提交:

image-20221003094601893

查看CodeCommit的控制台,能刷新到新的分支的提交:

image-20221003094548864

分支合并

当实习生提交代码到dev分支后,需要资深的工程师来将代码合并,此时需要创建pull request:

image-20221003095929240

将dev分支的更新合并到master:

image-20221003100010840

点击Create pull request

image-20221003100028933

然后进行合并:

image-20221003100050231

image-20221003100131994

完成后,新开发的功能就合并到master分支