限制推送和合併到分支 AWS CodeCommit - AWS CodeCommit

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

限制推送和合併到分支 AWS CodeCommit

根據預設,任何具有足夠權限將程式碼推送至 CodeCommit 儲存庫的存放庫使用者,都可以對該儲存庫中的任何分支做出貢獻。無論您將分支新增到儲存庫的方式為何:使用主控台、命令列或 Git,都是如此。不過,您可能想要設定分支,使得只有部分儲存庫使用者可以將程式碼推送或合併至該分支。例如,您可能想要設定用於生產程式碼的一個分支,使得只有一組資深開發人員可以將變更推送或合併至該分支。其他開發人員仍可以從分支提取、製作自己的分支,以及建立提取請求,但無法將變更推送或合併至該分支。您可以透過建立條件政策來設定此存取權,該政策使用 IAM 中一或多個分支的內容金鑰。

注意

若要完成本主題中的某些程序,您必須使用具有足夠權限來設定和套用 IAM 政策的管理員使用者登入。如需詳細資訊,請參閱建立 IAM 管理員使用者和群組

設定 IAM 政策以限制推送和合併到分支

您可以在 IAM 中建立政策,防止使用者更新分支,包括將提交推送至分支,以及將提取請求合併到分支。若要這樣做,您的政策會使用條件式陳述式,使得只有在符合條件時,才會套用 Deny 陳述式的效果。您在 Deny 陳述式中包含的 API 會決定不允許的動作。您可以將此政策設定為僅套用至儲存庫中的一個分支、儲存庫中的多個分支,或套用至 Amazon Web Services 帳戶中所有儲存庫中符合條件的所有分支。

為分支建立條件式政策
  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在導覽窗格中,選擇政策

  3. 選擇 Create policy (建立政策)。

  4. 選擇 JSON,然後將下列範例政策貼上。將 Resource 的值取代為包含您要限制存取分支儲存庫的 ARN。將 codecommit:References 的值以您要限制存取之一或多個分支的參考取代。例如,此原則會拒絕推送認可、合併分支、刪除分支、合併提取要求,以及將檔案新增至名為的分支,以main及名為以下命名的儲存庫prod中名為的分支:MyDemoRepo

    { "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" } } } ] }

    Git 中的分支只是標頭遞交 SHA-1 值的指標 (參考),這是條件使用 References 的原因。在效果為 DenyGitPush 是其中一個動作的任何政策中,Null 陳述式為必要。因為從本機儲存庫將變更推送至 CodeCommit 時 Git 和 git-receive-pack 的運作方式,這為必要。

    提示

    若要建立適用於 Amazon Web Services 帳戶中所有儲存庫中名為 main 的所有分支的政策,請將儲存庫 ARN 的Resource值變更為星號 (*)。

  5. 選擇檢閱政策。更正政策陳述式中的任何錯誤,然後繼續 Create policy (建立政策)

  6. 當 JSON 經過驗證,隨即會顯示 Create policy (建立政策) 頁面。Summary (摘要) 區段中會出現警告,建議您此政策將不會授予許可。這是預期的行為。

    • ​Name (名稱) 中,輸入此政策的名稱,例如 DenyChangesToMain

    • Description (描述) 中,輸入政策目的之描述。此為選用操作,但建議您採用。

    • 選擇建立政策

將 IAM 政策套用至 IAM 群組或角色

您已建立限制推送和合併到分支的政策,但在您將其套用至 IAM 使用者、群組或角色之前,該政策才會生效。最佳做法是考慮將政策套用至 IAM 群組或角色。將政策套用至個別 IAM 使用者並不能很好地擴展。

將條件式政策套用至群組或角色
  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在瀏覽窗格中,如果要將政策套用至 IAM 群組,請選擇 [群組]。如果要將政策套用至使用者所擔任的角色,請選擇 [角色]。選擇群組或角色的名稱。

  3. 在 [權限] 索引標籤上,選擇 [連接政策]。

  4. 選取您從策略清單建立的條件政策,然後選擇 Attach policy (附加政策)

如需詳細資訊,請參閱附加和取消 IAM 政策

測試原則

您應該測試您對群組或角色套用政策的效果,以確保它可如預期運作。您有很多種方法可以執行此操作。例如,若要測試類似以上所示的政策,您可以:

  • 使用 IAM 使用者 (身為已套用政策的 IAM 群組成員) 登入 CodeCommit 主控台,或擔任已套用該政策的角色。在主控台中,於套用限制的分支上新增檔案。嘗試將檔案儲存或上傳到該分支時,您應該會看到錯誤訊息。將檔案新增到不同分支。操作應該會成功。

  • 使用 IAM 使用者 (身為已套用政策的 IAM 群組成員) 登入 CodeCommit 主控台,或擔任已套用該政策的角色。建立提取請求,其將合併到限制適用所在的分支。您應該可以建立提取請求,但在嘗試合併它時發生錯誤。

  • 從終端或命令行,在適用限制的分支上創建一個提交,然後將該提交推送到 CodeCommit 存儲庫。您應該會看到錯誤訊息。從其他分支進行的遞交和推送應該可以照常運作。