NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    CodeCommitリポジトリのブランチごとにgit pullのアクセス制御をしようとして失敗した話

    はじめまして。新卒入社2年目の大林です。 本記事ではCodeCommitリポジトリのブランチごとにgit pullのアクセス制御をしようとして失敗した話を紹介します。

    やろうとしたこと

    1. ローカル環境からIAMユーザーにログインする。
    2. 環境操作権限があるIAMロールにスイッチして、環境サービス内のEC2インスタンスに接続する。
    3. 本番環境サービス内のEC2インスタンスは本番環境サービス内のEC2インスタンス用IAMロールに、開発環境サービス内のEC2インスタンスは開発環境サービス内のEC2インスタンス用IAMロールにスイッチする。
    4. CodeCommitリポジトリへのgit pullを行う。

    本番環境サービス内のEC2インスタンス用IAMロールに付与した権限
    masterブランチへのgit pullを許可、developブランチへのgit pullを拒否

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "codecommit:GitPull"
                ],
                "Resource": "arn:aws:codecommit:ap-northeast-1:XXXXXXXXXXXX:*",
                "Condition": {
                    "StringEqualsIfExists": {
                        "codecommit:References": [
                            "refs/heads/master"
                        ]
                    }
                }
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Deny",
                "Action": [
                    "codecommit:GitPull"
                ],
                "Resource": "arn:aws:codecommit:ap-northeast-1:XXXXXXXXXXXX:*",
                "Condition": {
                    "StringEqualsIfExists": {
                        "codecommit:References": [
                            "refs/heads/develop"
                        ]
                    }
                }
            }
        ]
    }


    開発環境サービス内のEC2インスタンス用IAMロールに付与した権限
    developブランチからのgit pullを許可、masterブランチへのgit pullを拒否

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Deny",
                "Action": [
                    "codecommit:GitPull"
                ],
                "Resource": "arn:aws:codecommit:ap-northeast-1:XXXXXXXXXXXX:*",
                "Condition": {
                    "StringEqualsIfExists": {
                        "codecommit:References": [
                            "refs/heads/master"
                        ]
                    }
                }
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Allow",
                "Action": [
                    "codecommit:GitPull"
                ],
                "Resource": "arn:aws:codecommit:ap-northeast-1:XXXXXXXXXXXX:*",
                "Condition": {
                    "StringEqualsIfExists": {
                        "codecommit:References": [
                            "refs/heads/develop"
                        ]
                    }
                }
            }
        ]
    }

    テスト実施/結果

    テスト
    本番環境サービス内のEC2インスタンスから本番環境サービス内のEC2インスタンス用のIAMロールにスイッチして、git cloneを実行する。

    期待動作
    masterブランチからはcloneできるが、developブランチからはcloneできない。

    結果
    どちらのブランチからもcloneできなかった。

    $ git clone -b master https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/y-obayashi-test
    Cloning into 'y-obayashi-test'...
    fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/y-obayashi-test/': The requested URL returned error: 403
    $ git clone -b develop https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/y-obayashi-test                                              
    Cloning into 'y-obayashi-test'...
    fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/y-obayashi-test/': The requested URL returned error: 403

    開発環境サービス内のEC2インスタンスからもgit cloneを実行しましたが、ブランチごとの制御はうまくいきませんでした。

    結論

    サポートに問い合わせたところ、「アクション GitPull が条件キー codecommit:References に対応していないため、特定のブランチに対する制御ができない」との回答をいただきました。 そのため、CodeCommitリポジトリにアクセスできるIAMロールを作成して、CodeCommitリポジトリにアクセスするときはその都度IAMロールをスイッチして作業をすることにしました。 上記のIAMロールには、どのブランチでもgit pullを実行できる権限を付与しました。

    さいごに

    今回は、CodeCommitリポジトリのブランチごとにgit pullのアクセス制御をしようとして失敗した話を紹介しました。
    AWSの学習は知識として覚えるだけではなく、実際に手を動かしてみることが大事だと思いました。

    執筆者 大林優斗

    2025 Japan AWS Top Engineers

    2024 Japan AWS Jr. Champions

    Twitter:https://twitter.com/rUzXddG0vA9853

    個人ブログ:https://tech.nri-net.com/archive/author/y-obayashi

    登壇資料:https://speakerdeck.com/yuobayashi