CodeCommit でブランチごとにアクセス制御できるアクションを教えてください

2022.09.29

困っていた内容

AWS 公式ブログを参考に、CodeCommit でブランチごとのアクセス制御を検討しています。
どのようなアクションがブランチごとの制御に対応しているかがわからないので、CodeCommit でブランチごとにアクセス制御できるアクションを教えてください。

どう対応すればいいの?

2022 年 9 月時点では、以下のアクションがブランチレベルでのアクセス制御の対象です。

・CreateBranch
・CreateCommit
・CreateUnreferencedMergeCommit
・DeleteBranch
・DeleteFile
・GetMergeCommit
・GitPush
・MergeBranchesByFastForward
・MergeBranchesBySquash
・MergeBranchesByThreeWay
・MergePullRequestByFastForward
・MergePullRequestBySquash
・MergePullRequestByThreeWay
・PutFile

サンプルのポリシーについては、AWS 公式ドキュメントでも紹介されています。

AWS 公式ドキュメントより

例えば、このポリシーは、コミットのプッシュ、ブランチのマージ、 ブランチの削除、 プルリクエストのマージ、および 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"
                }
            }
        }
    ]
}

上記の通り、CodeCommit では、特定のアクションについては、条件キー codecommit:References がサポートされており、こちらを利用することでブランチレベルでのアクセス制御が可能となります。
どのアクションで条件キー codecommit:References がサポートされているかは、こちらの AWS 公式ドキュメントで確認できます。

ただし、今後のアップデートでサポートされるアクションが増える可能性はあるので、気になる場合は AWS のアップデート情報やドキュメントの英語版を定期的に確認してください。

参考資料