11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CodeCommitのmainブランチへのプッシュとマージを制限

Posted at

はじめに

 mainブランチへの誤ったpush対策としてpre-pushファイルを使用した対策を行っていました。
 GitのリポジトリをCodeCommitで運用することになり、同じような対策をIAMポリシーを使用し行ったので、その設定方法を記事にしたいと思います。

本記事でやったこと

IAMポリシーを使用しCodeCommitに下記、制限を設定する。

  • mainブランチへpushを禁止。
  • mainブランチへのマージをプルリクエストからに制限。

手順

AWS CodeCommit のブランチに対するプッシュとマージの制限を参考にIAMポリシーを作成しました。
1.AWSのIAM コンソール (https://console.aws.amazon.com/iam/) を開く。
2.[ポリシー] ⇒ [ポリシーの作成] ⇒ [JSON] を選択 ⇒ jsonを編集。

参考にしたIAMポリシーのjson

下記、参考にしたIAMポリシーのjsonです。
リポジトリ名が「MyDemoRepo」のmainブランチとprodブランチに対し、プッシュ、削除、ファイルの追加、マージを拒否する設定です。

{
    "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

下記、作成したIAMポリシーのjsonです。
全リポジトリのmainブランチに対し、プッシュ、削除、ファイルの追加、マージ(プルリクエストは許可)を拒否する設定です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "codecommit:GitPush",
                "codecommit:DeleteBranch",
                "codecommit:PutFile",
                "codecommit:MergeBranchesByFastForward",
                "codecommit:MergeBranchesBySquash",
                "codecommit:MergeBranchesByThreeWay"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/main"
                    ]
                },
                "Null": {
                    "codecommit:References": "false"
                }
            }
        }
    ]
}

3.IAM ポリシーを適用
こちらを参考にIAMユーザーへ設定を反映させる。

設定内容

アクセス制限の設定

"Action"キーにアクセスを制限したい操作を記載することで、アクセス拒否の設定ができます。
今回、プルリクエストは許可したかったので関連する値を除外しました。
※設定できる項目についてはCodeCommit アクセス許可リファレンスから確認できます。

"Action": [
    "codecommit:GitPush",
    "codecommit:DeleteBranch",
    "codecommit:PutFile",
    "codecommit:MergeBranchesByFastForward",
    "codecommit:MergeBranchesBySquash",
    "codecommit:MergeBranchesByThreeWay"
],
対象のリポジトリ

"Resource"キーは対象のリポジトリのARNを記載する箇所ですが、"*"を記載し全リポジトリを対象にしました。

"Resource": "*",
対象のブランチ

"refs/heads/main"と記載し、mainブランチを対象にしています。

"StringEqualsIfExists": {
    "codecommit:References": [
        "refs/heads/main", 
     ]
},

動作確認

mainへpush

ツールはphpstormを使用しmainにpushしたところ、ログにパーミッションのエラーが出力されpushを拒否できました。
WS000008.JPG

プルリクエストからのマージ

AWSコンソールのプルリクエストの作成から、mainへのマージができました。
WS000009.JPG

おわりに

 pre-pushファイルを使用した対策と比べて、他ユーザーへの反映が簡単にできるので便利だなと思いました。
 まだCodeCommitを使用した運用の経験が浅いので、もっと良い方法があれ取り入れて、カスタマイズしていけたらなと思います。
 

参考資料

 ・AWS CodeCommit のブランチに対するプッシュとマージの制限 - AWS CodeCommit(最終閲覧日:2022年1月18日)
 ・CodeCommit アクセス許可リファレンス - AWS CodeCommit(最終閲覧日:2022年1月18日)

11
4
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
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?