0
0

More than 1 year has passed since last update.

【AWS】マージでソースブランチを消さない【CodeCommit】

Posted at

事件はおこった

マージしたらソースブランチ消えた問題。
1回2回ならまだしも、続くと萎えます

TL:DR

該当ブランチの削除オペを拒否するIAMポリシーをIAMグループまたはIAMユーザにアタッチしたら解決

調べたさ

Github/GHE使ってるときはどうだったっけなぁ。。。とか思いつつ
現実問題、ブランチの削除を拒否する方法が欲しかった。
設定画面からマージするときに削除するチェックボックスを外す的な機能があるかと思ったが、なかった。
すぐ面倒くさくなってサポートに丸投げしたのは内緒だぞ!

IAMポリシーで定義しろってさ

CodeCommitはAWS様の配下にあるので、
IAMで制限を掛けてねバッチコイってワケです。

どういう風に定義するの

IAMポリシーはこう書くの

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "codecommit:DeleteBranch",
            "Resource": "arn:aws:codecommit:*:1919114514:*",
            "Condition": {
                "StringLikeIfExists": {
                    "codecommit:References": [
                        "refs/heads/dev-*",
                        "refs/heads/master-*"
                    ]
                }
            }
        }
    ]
}

こんな風に定義してあげましょう

うっかり間違ってmaster系ブランチの削除オペを防ぐために、
ついでにmaster-何某ブランチの削除も拒否しちゃいましょう。

えっ!?master系ブランチに直PUSHですか!?

ぶっちゃけ個人で使ってる分にはmasterに直PUSHわかる
チーム開発の経験が浅い方がPTに居る場合、MASTERに直接PUSHしてくれる方がいます。
SREさん?DevOps担当さん?の言うことを、ブランチ設計をよく聞いてPUSHするんだぞみんな

MASTERに直接PUSHをさせたくない場合は、下記のポリシーを足してあげるといいでしょう

こう書くの

        {
            "Sid": "VisualEditor1",
            "Effect": "Deny",
            "Action": "codecommit:GitPush",
            "Resource": "arn:aws:codecommit:*:1919114514:*",
            "Condition": {
                "StringLikeIfExists": {
                    "codecommit:References": "refs/heads/master*"
                }
            }
        }

参考資料

ブランチへのプッシュとマージを制限するための IAM ポリシーの設定 - AWS CodeCommit
下記のようなjsonテンプレートがあります
※マニュアルから抜粋

{
    "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/main",
                        "refs/heads/prod"
                     ]
                },
                "Null": {
                    "codecommit:References": "false"
                }
            }
        }
    ]
}

IAM JSON ポリシー要素Condition - AWS Identity and Access Management

びぼうろくでした

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0