当前位置: 首页 > news >正文

AWS CodeCommit中分支保护

场景

需要保护特定的主干分支,防止初级开发人员直接提交变更到主干分支。主干分支的代码必须由架构组成员进行审核。

思路

创建一个自定义分支保护策略,防止用户自己对需要保护的主干分支进行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操作。

参考:

  • AWSCodeCommit 的托管策略
  • 限制针对中分支的推送和合并AWS CodeCommit

相关文章:

  • 免费搭建查题公众号提供题库接口
  • 13---OpenCV:图像进阶操作之①图像直方图②图像金字塔
  • 石头科技: 决胜百亿扫地机器人“价值高地”
  • 趁着中秋节来临之际,学学如何做好团队管理
  • Spring Cloud项目(八)——使用gateway作为服务网关
  • 为什么要注册商标?有什么好处?
  • C/C++后端开发学习路线总结(附带实习学习经历分享)
  • 广西大学口袋开发板之抢答器
  • 【Python零基础入门篇 · 2】:掌握各种运算符和变量、input()输入输出、映射函数map()结合input()和split()函数实现多值输入
  • 单向环形链表构建(思路分析) [Java][数据结构]
  • 数智随行 | 探想未来工厂数字化,强化智能设备管理
  • 解决所有二叉树路径问题
  • Apache Kyuubi 在小米大数据平台的应用实践
  • 论文阅读(8)Cool your jets:海洋无脊椎动物的生物喷射推进(2021)
  • Git基本应用<一>:Git安装及GitHub连接
  • 分享一款快速APP功能测试工具
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Asm.js的简单介绍
  • github从入门到放弃(1)
  • GraphQL学习过程应该是这样的
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 2015 Top Rank
  • Swift 中的尾递归和蹦床
  • 构建工具 - 收藏集 - 掘金
  • 好的网址,关于.net 4.0 ,vs 2010
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 通过git安装npm私有模块
  • 小李飞刀:SQL题目刷起来!
  • 学习笔记:对象,原型和继承(1)
  • - 转 Ext2.0 form使用实例
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​马来语翻译中文去哪比较好?
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (办公)springboot配置aop处理请求.
  • (动态规划)5. 最长回文子串 java解决
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (译)2019年前端性能优化清单 — 下篇
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net Core和.Net Standard直观理解
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET企业级应用架构设计系列之结尾篇
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ajaxupload] - 上传文件同时附件参数值
  • [AR Foundation] 人脸检测的流程
  • [C#] 我的log4net使用手册
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo