CodeCommit上のリポジトリでmasterブランチへのプッシュを禁止してみる
どうも!大阪オフィスの西村祐二です。
ソースコードをGitで管理するとき、pull request
ベースで運用することが多いのではないでしょうか。
そんなとき、リモートのmaster
ブランチには直接pushして欲しくないと思います。間違ってpushしたとしてもサーバ側で拒否してほしいですよね。
CodeCommitではIAMを使うことによって簡単に制限することができます。
今回はその方法について記載します。
どうやって制限するのか
IAMポリシーを使って制限します。
プッシュ以外にも、プルリクエストを制限したり、ファイルのアップデートを禁止させたいすることができます。 また、ポリシーで条件ステートメントを使用し、条件が満たされている場合にのみ Deny ステートメントを適用することができます。
ブランチへのプッシュを制限するためのIAMポリシーを作成する
CodeCommit上のリポジトリでmasterブランチへのプッシュを禁止するために、IAMポリシーを使って制限します。
そのポリシーをマネージメントコンソールから作成します。
▼ポリシー作成をクリックします。
▼jsonタブをクリックします。
▼下記ポリシーを貼り付けて次へ
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codecommit:GitPush" ], "Resource": "*", "Condition": { "StringEqualsIfExists": { "codecommit:References": [ "refs/heads/master" ] }, "Null": { "codecommit:References": false } } } ] }
- プッシュだけじゃなくプルリクエストのマージも禁止したいときは
"codecommit:MergePullRequestByFastForward"
をActionのところに追加すると制限することができます。
- あるリポジトリのみ制限したい場合はResourceにARN(
arn:aws:codecommit:<region>:<account id>:<repo name>
)を設定することで実現できます。 -
masterブランチだけじゃなく、prodブランチも禁止させたい場合は、masterブランチの下に
"refs/heads/prod"
を追加することで合わせて制限することができます。
▼名前を「deny-push-master-branch」としてポリシー作成します。
ポリシーの作成は完了です。
IAMポリシーを適用する
ブランチへのプッシュを制限するポリシーを作成しましたが、そのポリシーをIAMユーザー、グループ、またはロールに適用するまで効果がありません。
グループで管理する方法と、直接アタッチする方法の2つのパターンをご紹介します。どちらかの方法で設定してください。
パターン1:IAMグループを作成しIAMポリシーを紐づけ、ユーザを追加する
▼グループを作成します。
▼グループ名「codecommit」として作成します。
▼作成したポリシーを指定します。
▼グループにユーザを追加します。
▼masterブランチへのプッシュを禁止させたいユーザを選びます。
これで設定完了です。
パターン2:IAMユーザに直接IAMポリシーをアタッチする
▼ポリシーアクションから「アタッチ」を選択します。
▼masterブランチへのプッシュを禁止させたいユーザを選びます。
これで設定完了です。
動作確認
実際にmasterブランチにpushしてみましょう。
$ git push origin master --force Counting objects: 2, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 237 bytes | 237.00 KiB/s, done. Total 2 (delta 1), reused 0 (delta 0) To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test ! [remote rejected] master -> master (You don't have permission to push changes to this branch.) error: failed to push some refs to 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test'
想定通り、rejected
されていることがわかります。
さいごに
いかがだったでしょうか。
IAMポリシーを使って、CodeCommit上のリポジトリでmasterブランチへのプッシュを禁止してみました。
Githubのように高機能ではないですが、必要最低限の機能は揃っていると思いますので、CodeCommitを使ってみてはいかがでしょうか。
誰かの参考になれば幸いです。