

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# のブランチへのプッシュとマージを制限する AWS CodeCommit
<a name="how-to-conditional-branch"></a>

デフォルトでは、リポジトリにコードをプッシュするための十分な権限を持つ CodeCommit リポジトリユーザーは、そのリポジトリ内のブランチに貢献できます。これは、リポジトリにブランチをコンソール、コマンドライン、または Git を使用して追加した場合でも当てはまります。ただし、一部のリポジトリユーザーだけがそのブランチにコードをプッシュまたはマージできるように、ブランチを設定することもできます。たとえば、シニア開発者のサブセットのみが変更をそのブランチにプッシュまたはマージできるように、実動コードに使用されるブランチを設定することができます。他の開発者は、依然としてブランチから引き出し、独自のブランチを作成して、プルリクエストを作成できますが、そのブランチに変更をプッシュまたはマージすることはできません。IAM の 1 つ以上のブランチのコンテキストキーを使用する条件付きポリシーを作成して、このアクセスを設定できます。

**注記**  
このトピックのいくつかの手順を完了するには、IAM ポリシーを設定して適用するのに十分なアクセス権限を持つ管理者ユーザーでサインインする必要があります。詳細については、「[IAM 管理者のユーザーおよびグループの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)」を参照してください。

**Topics**
+ [ブランチへのプッシュとマージを制限するための IAM ポリシーの設定](#how-to-conditional-branch-create-policy)
+ [IAM グループまたはロールに IAM ポリシーを適用する](#how-to-conditional-branch-apply-policy)
+ [ポリシーのテスト](#how-to-conditional-branch-test)

## ブランチへのプッシュとマージを制限するための IAM ポリシーの設定
<a name="how-to-conditional-branch-create-policy"></a>

IAM にポリシーを作成すると、ユーザーがブランチにコミットをプッシュしたり、プルリクエストをブランチにマージするなど、ブランチを更新できないようにすることができます。これを行うには、条件が満たされている場合にのみ `Deny` ステートメントの効果が適用されるように、ポリシーで条件ステートメントを使用します。`Deny` ステートメントに含める API によって、どのアクションが許可されないかが決まります。このポリシーは、リポジトリ内の 1 つのみのブランチ、リポジトリ内のいくつかのブランチ、または Amazon Web Services アカウント内のすべてのリポジトリで条件に一致するすべてのブランチに適用するように設定できます。<a name="how-to-conditional-branch-create-policy-procedure"></a>

**ブランチの条件付きポリシーを作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. ナビゲーションペインで、**ポリシー** を選択してください。

1. [**ポリシーの作成**] を選択します。

1. [**JSON**] を選択し、以下のポリシー例を貼り付けます。`Resource` の値を、アクセスを制限するブランチを含むリポジトリの ARN に置き換えます。`codecommit:References` の値を、アクセスを制限したいブランチへの参照に置き換えます。例えば、このポリシーは、コミットのプッシュ、ブランチのマージ、ブランチの削除、ファイルの削除、プルリクエストのマージ、および `MyDemoRepo` という名前のリポジトリの *`main`* というブランチと `prod` というブランチへのファイルの追加を拒否します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": [
                   "codecommit:GitPush",
                   "codecommit:DeleteBranch",
                   "codecommit:DeleteFile",
                   "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"
                   }
               }
           }
       ]
   }
   ```

------

   Git のブランチは、ヘッドコミットの SHA-1 値へのポインタ (リファレンス) です。そのため、条件では `References` が使用されます。効果が `Null` で、`Deny` がアクションの 1 つであるポリシーでは、`GitPush` ステートメントが必要です。これは、ローカルリポジトリから CodeCommit に変更をプッシュするときに、Git と `git-receive-pack` がどのように動作するかによって必要となります。
**ヒント**  
Amazon Web Services アカウントですべてのリポジトリ内の main という名前のすべてのブランチに適用されるポリシーを作成するには、`Resource` の値をリポジトリ ARN からアスタリスク (`*`) に変更します。

1. [**ポリシーの確認**] を選択します。ポリシーステートメントのエラーを修正し、[**ポリシーの作成**] に進みます。

1. JSON が検証されると、[**ポリシーの作成**] ページが表示されます。[**概要**] セクションに、このポリシーによってアクセス許可が付与されないことを示す警告が表示されます。これは通常の動作です。
   + [**Name**] (名前) に、このポリシーの名前 (例: **DenyChangesToMain**) を入力します。
   + [**説明**] に、ポリシーの目的の説明を入力します。これはオプションですが推奨されます。
   + [**ポリシーの作成**] を選択します。

## IAM グループまたはロールに IAM ポリシーを適用する
<a name="how-to-conditional-branch-apply-policy"></a>

ブランチへのプッシュとマージを制限するポリシーを作成しましたが、そのポリシーは IAM ユーザー、グループ、またはロールに適用するまで効果がありません。ベストプラクティスとして、IAM グループまたはロールにポリシーを適用することを検討してください。個々の IAM ユーザーにポリシーを適用しても、うまくスケールされません。<a name="how-to-conditional-branch-apply-policy-procedure"></a>

**条件付きポリシーをグループまたはロールに適用するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. ポリシーを IAM グループに適用する場合は、ナビゲーションペインで [**グループ**] を選択し、ユーザーが引き受けるロールにポリシーを適用する場合は、[**ロール**] を選択します。グループまたはロールの名前を選択します。

1. [**Permissions**] タブで [**Attach Policy**] を選択します。

1. 作成した条件付きポリシーをポリシーのリストから選択し、[**ポリシーのアタッチ**] を選択します。

詳細については、「[IAM ポリシーをアタッチおよびデタッチする](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

## ポリシーのテスト
<a name="how-to-conditional-branch-test"></a>

グループまたはロールに適用したポリシーの効果をテストして、期待どおりに機能するようにする必要があります。その方法は数多くあります たとえば、上記のようなポリシーをテストするには、以下のようにします。
+ CodeCommit コンソールに、ポリシーが適用されている IAM グループのメンバーである IAM ユーザー、またはポリシーが適用されているロールを持つユーザーとしてサインインします。コンソールで、制限が適用されるブランチにファイルを追加します。そのブランチにファイルを保存またはアップロードしようとすると、エラーメッセージが表示されます。ファイルを別のブランチに追加します。これで、オペレーションが成功します。
+ CodeCommit コンソールに、ポリシーが適用されている IAM グループのメンバーである IAM ユーザー、またはポリシーが適用されているロールを持つユーザーとしてサインインします。制限が適用されるブランチにマージするプルリクエストを作成します。プルリクエストを作成できるはずですが、マージしようとするとエラーが発生します。
+ ターミナルまたはコマンドラインから、制限が適用されるブランチでコミットを作成し、そのコミットを CodeCommit リポジトリにプッシュします。エラーメッセージが表示されます。他のブランチからのコミットとプッシュはいつものように動作するはずです。