のブランチへのプッシュとマージを制限する AWS CodeCommit - AWS CodeCommit

AWS CodeCommit は、新しいお客様では利用できなくなりました。 AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら

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

のブランチへのプッシュとマージを制限する AWS CodeCommit

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

注記

このトピックの手順の一部を完了するには、IAMポリシーを設定および適用するための十分なアクセス許可を持つ管理ユーザーでサインインする必要があります。詳細については、IAM「管理者ユーザーとグループの作成」を参照してください。

ブランチへのプッシュとマージを制限するIAMポリシーを設定する

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

ブランチの条件付きポリシーを作成するには
  1. にサインイン AWS Management Console し、 でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/

  2. ナビゲーションペインで、ポリシー を選択します。

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

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

    { "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 ステートメントが必要です。これは、ローカルリポジトリから に変更をプッシュするときに Git と がgit-receive-pack動作する方法のために必要です CodeCommit。

    ヒント

    Amazon Web Services アカウントのすべてのリポジトリで main という名前のすべてのブランチに適用されるポリシーを作成するには、 の値をリポジトリResourceからARNアスタリスク () に変更します*

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

  6. JSON が検証されると、ポリシーの作成ページが表示されます。[概要] セクションに、このポリシーによってアクセス許可が付与されないことを示す警告が表示されます。これは通常の動作です。

    • [Name] (名前) に、このポリシーの名前 (例: DenyChangesToMain) を入力します。

    • [説明] に、ポリシーの目的の説明を入力します。これはオプションですが推奨されます。

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

IAM ポリシーをIAMグループまたはロールに適用する

ブランチへのプッシュとマージを制限するポリシーを作成しましたが、IAMユーザー、グループ、またはロールに適用するまで、ポリシーは効果がありません。ベストプラクティスとして、ポリシーをIAMグループまたはロールに適用することを検討してください。個々のIAMユーザーへのポリシーの適用は、適切にスケーリングされません。

条件付きポリシーをグループまたはロールに適用するには
  1. にサインイン AWS Management Console し、 でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/

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

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

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

詳細については、IAM「ポリシーのアタッチとデタッチ」を参照してください。

ポリシーのテスト

グループまたはロールに適用したポリシーの効果をテストして、期待どおりに機能するようにする必要があります。その方法は数多くあります たとえば、上記のようなポリシーをテストするには、以下のようにします。

  • ポリシーが適用されているIAMグループのメンバーであるか、ポリシーが適用されているロールを引き受けているIAMユーザーを使用して CodeCommit コンソールにサインインします。コンソールで、制限が適用されるブランチにファイルを追加します。そのブランチにファイルを保存またはアップロードしようとすると、エラーメッセージが表示されます。ファイルを別のブランチに追加します。これで、オペレーションが成功します。

  • ポリシーが適用されているIAMグループのメンバーであるか、ポリシーが適用されているロールを引き受けているIAMユーザーを使用して CodeCommit コンソールにサインインします。制限が適用されるブランチにマージするプルリクエストを作成します。プルリクエストを作成できるはずですが、マージしようとするとエラーが発生します。

  • ターミナルまたはコマンドラインから、制限が適用されるブランチにコミットを作成し、そのコミットを CodeCommit リポジトリにプッシュします。エラーメッセージが表示されます。他のブランチからのコミットとプッシュはいつものように動作するはずです。