CodeCommit で特定ブランチへの操作を制限する

記事タイトルとURLをコピーする

こんにちは。CI部の柳田です。 CodeCommit では IAM ポリシーを使って特定ブランチへの操作を制限することができるので、試しにやってみようと思います。

やりたいこと

master ブランチと develop ブランチのあるリポジトリ(本ブログでは test-repo )で、特定ユーザが master ブランチの更新や削除をできないよう制限をします。 具体的には、master ブランチに対して以下をできなくしちゃいます。

  • コミットのプッシュ
  • ブランチのマージ
  • プルリクエストのマージ
  • AWS マネジメントコンソールからのファイル追加・更新
  • ファイル削除(AWS CLI からのみできる操作)
  • ブランチの削除

設定手順

1. IAM ポリシーの作成

「deny-action-master-branch」という IAM ポリシー名で以下ポリシーを作成します。 【】内は環境に合わせて設定してください。

    
        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Deny",
                    "Action": [
                        "codecommit:GitPush",
                        "codecommit:DeleteBranch",
                        "codecommit:PutFile",
                        "codecommit:DeleteFile",
                        "codecommit:MergeBranchesByFastForward",
                        "codecommit:MergeBranchesBySquash",
                        "codecommit:MergeBranchesByThreeWay",
                        "codecommit:MergePullRequestByFastForward",
                        "codecommit:MergePullRequestBySquash",
                        "codecommit:MergePullRequestByThreeWay"
                    ],
                    "Resource": "arn:aws:codecommit:ap-northeast-1:【AWSアカウントID】:【リポジトリ名】",
                    "Condition": {
                        "StringEqualsIfExists": {
                            "codecommit:References": [
                                "refs/heads/master"
                            ]
                        },
                        "Null": {
                            "codecommit:References": false
                        }
                    }
                }
            ]
        }
    

2. IAM ユーザへ IAM ポリシーを紐付け

「deny-action-master-branch」という IAM ユーザを作成し、以下ポリシーを設定します。

  • AWSCodeCommitPowerUser
  • deny-action-master-branch(1. で作成したポリシー)

これで、IAM ユーザ「deny-action-master-branch」は、master ブランチへの更新や削除ができなくなりました。 制限対象の IAM ユーザが複数いる場合は、IAM グループにポリシーを設定するようにしましょう。

動作確認

作成した IAM ユーザ「deny-action-master-branch」を使って、 master ブランチの更新や削除ができなくなっているか確認します。 AWS マネジメントコンソールからの編集ができないこととコミットのプッシュができないこと、2点のみを載せていますが、プルリクエストのマージやブランチの削除も master ブランチに対してはできないです。

AWS マネジメントコンソールから編集ができないことを確認

IAM ユーザ「deny-action-master-branch」で AWS マネジメントコンソールにログインします。

master ブランチ

「修正できるかな」を追加して、コミットしてみましたが、権限がないためエラーとなります。

develop ブランチ

「修正できるかな」を追加して、コミットしてみました、問題なく実行できます。

コミットのプッシュができないことを確認

まずは、リポジトリからコードをクローンします。

master ブランチ

「GitPushできるかな(master)」を追加して、プッシュしてみましたが、権限がないためエラーとなります。

develop ブランチ

「GitPushできるかな(develop)」を追加して、プッシュしてみました。問題なく実行できます。

おわりに

IAM ポリシーを使った細やかな権限設定ができるのは、CodeCommit の良い点だと思います。 特定ブランチを特定ユーザのみ更新ができるようにしたい場合は是非活用してみてください。

参考資料

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-conditional-branch.html