AWS CodeCommit は、新規顧客には利用できなくなりました。 AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
のブランチへのプッシュとマージを制限する AWS CodeCommit
デフォルトでは、 CodeCommit コードをリポジトリにプッシュするのに十分なアクセス許可を持つリポジトリユーザーは、そのリポジトリ内の任意のブランチに貢献できます。これは、リポジトリにブランチをコンソール、コマンドライン、または Git を使用して追加した場合でも当てはまります。ただし、一部のリポジトリユーザーだけがそのブランチにコードをプッシュまたはマージできるように、ブランチを設定することもできます。たとえば、シニア開発者のサブセットのみが変更をそのブランチにプッシュまたはマージできるように、実動コードに使用されるブランチを設定することができます。他の開発者は、依然としてブランチから引き出し、独自のブランチを作成して、プルリクエストを作成できますが、そのブランチに変更をプッシュまたはマージすることはできません。IAM の 1 つ以上のブランチのコンテキストキーを使用する条件付きポリシーを作成して、このアクセスを設定できます。
注記
このトピックのいくつかの手順を完了するには、IAM ポリシーを設定して適用するのに十分なアクセス権限を持つ管理者ユーザーでサインインする必要があります。詳細については、「IAM 管理者のユーザーおよびグループの作成」を参照してください。
ブランチに対するプッシュとマージを制限するための IAM ポリシーの設定
IAM にポリシーを作成すると、ユーザーがブランチにコミットをプッシュしたり、プルリクエストをブランチにマージするなど、ブランチを更新できないようにすることができます。これを行うには、条件が満たされている場合にのみ Deny
ステートメントの効果が適用されるように、ポリシーで条件ステートメントを使用します。Deny
ステートメントAPIsに含める によって、許可されないアクションが決まります。このポリシーは、リポジトリ内の 1 つのみのブランチ、リポジトリ内のいくつかのブランチ、または Amazon Web Services アカウント内のすべてのリポジトリで条件に一致するすべてのブランチに適用するように設定できます。
ブランチの条件付きポリシーを作成するには
-
にサインイン AWS Management Console し、 で IAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで、ポリシー を選択します。
-
[ポリシーの作成] を選択します。
-
を選択しJSON、次のポリシー例を貼り付けます。の値を、アクセスを制限するブランチを含むリポジトリARNの
Resource
に置き換えます。codecommit:References
の値を、アクセスを制限したいブランチへの参照に置き換えます。たとえば、このポリシーは、コミットのプッシュ、ブランチのマージ、ブランチの削除、ファイルの削除、プルリクエストのマージ、 という名前のリポジトリ
内の という名前prod
のブランチへのファイルの追加を拒否しますmain
。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
ステートメントが必要です。これは、ローカルリポジトリから CodeCommit に変更をプッシュするときに、Git とgit-receive-pack
がどのように動作するかによって必要となります。ヒント
Amazon Web Services アカウントのすべてのリポジトリで main という名前のすべてのブランチに適用されるポリシーを作成するには、 の値をリポジトリ
Resource
からアスタリスク () ARN に変更します*
。 -
[ポリシーの確認] を選択します。ポリシーステートメントのエラーを修正し、[ポリシーの作成] に進みます。
-
JSON が検証されると、ポリシーの作成ページが表示されます。[概要] セクションに、このポリシーによってアクセス許可が付与されないことを示す警告が表示されます。これは通常の動作です。
-
[Name] (名前) に、このポリシーの名前 (例:
DenyChangesToMain
) を入力します。 -
[説明] に、ポリシーの目的の説明を入力します。これはオプションですが推奨されます。
-
[ポリシーの作成] を選択します。
-
IAM グループまたはロールに IAM ポリシーを適用する
ブランチへのプッシュとマージを制限するポリシーを作成しましたが、そのポリシーは IAM ユーザー、グループ、またはロールに適用するまで効果がありません。ベストプラクティスとして、IAM グループまたはロールにポリシーを適用することを検討してください。個々のユーザーと IAM ユーザーにポリシーを適用しても、うまくスケールされません。
条件付きポリシーをグループまたはロールに適用するには
-
にサインイン AWS Management Console し、 で IAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ポリシーを IAM グループに適用する場合は、ナビゲーションペインで [グループ] を選択し、ユーザーが引き受けるロールにこのポリシーを適用する場合は、[ロール] を選択します。グループまたはロールの名前を選択します。
-
[Permissions] タブで [Attach Policy] を選択します。
-
作成した条件付きポリシーをポリシーのリストから選択し、[ポリシーのアタッチ] を選択します。
詳細については、「IAM ポリシーをアタッチおよびデタッチする」を参照してください。
ポリシーのテスト
グループまたはロールに適用したポリシーの効果をテストして、期待どおりに機能するようにする必要があります。その方法は数多くあります たとえば、上記のようなポリシーをテストするには、以下のようにします。
-
ポリシーが適用された IAMグループのメンバーである ユーザー、またはポリシーが適用されたロールを引き受ける IAM ユーザーを使用して、 CodeCommit コンソールにサインインします。コンソールで、制限が適用されるブランチにファイルを追加します。そのブランチにファイルを保存またはアップロードしようとすると、エラーメッセージが表示されます。ファイルを別のブランチに追加します。これで、オペレーションが成功します。
-
ポリシーが適用された IAMグループのメンバーである ユーザー、またはポリシーが適用されたロールを引き受ける IAM ユーザーを使用して、 CodeCommit コンソールにサインインします。制限が適用されるブランチにマージするプルリクエストを作成します。プルリクエストを作成できるはずですが、マージしようとするとエラーが発生します。
-
ターミナルまたはコマンドラインから、制限が適用されるブランチにコミットを作成し、そのコミットを CodeCommit リポジトリにプッシュします。エラーメッセージが表示されます。他のブランチからのコミットとプッシュはいつものように動作するはずです。