

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

# 限制 中的分支推送和合併 AWS CodeCommit
<a name="how-to-conditional-branch"></a>

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

**注意**  
若要完成本主題中的某些程序，您必須使用具有足夠許可的管理使用者登入，以設定和套用 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 會決定不允許的動作。您可以設定此政策僅套用至儲存庫中的一個分支、儲存庫中的多個分支，或套用至 Amazon Web Services 帳戶中所有儲存庫中符合條件的所有分支。<a name="how-to-conditional-branch-create-policy-procedure"></a>

**為分支建立條件式政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

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

1. 選擇 **JSON**，然後將下列範例政策貼上。將 `Resource` 的值取代為包含您要限制存取分支儲存庫的 ARN。將 `codecommit:References` 的值以您要限制存取之一或多個分支的參考取代。例如，此政策拒絕推送遞交、合併分支、刪除分支、刪除檔案、合併提取請求，以及將檔案新增至名為 的分支{{`main`}}和名為 的儲存庫`{{prod}}`中的名為 的分支`{{MyDemoRepo}}`：

------
#### [ 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` 的原因。在效果為 `Deny` 且 `GitPush` 是其中一個動作的任何政策中，`Null` 陳述式為必要。由於從本機儲存庫推送變更至 CodeCommit 時，Git 和 `git-receive-pack`的運作方式，因此這是必要的。
**提示**  
若要建立套用到 Amazon Web Services 帳戶中所有儲存庫中名稱為主要的所有分支的政策，請將 的值`Resource`從儲存庫 ARN 變更為星號 (`*`)。

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

1. 當 JSON 經過驗證，隨即會顯示 **Create policy (建立政策)** 頁面。**Summary (摘要)** 區段中會出現警告，建議您此政策將不會授予許可。這是預期的行為。
   + 在 **​Name (名稱)** 中，輸入此政策的名稱，例如 **DenyChangesToMain**。
   + 在 **Description (描述)** 中，輸入政策目的之描述。此為選用操作，但建議您採用。
   + 選擇**建立政策**。

## 將 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：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，如果您想要將政策套用到 IAM 群組，請選擇**群組**。如果您想要將政策套用到使用者擔任的角色，請選擇**角色**。選擇群組或角色的名稱。

1. 在 [**權限**] 索引標籤上，選擇 [**連接政策**]。

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

如需詳細資訊，請參閱[連接和停用 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

## 測試政策
<a name="how-to-conditional-branch-test"></a>

您應該測試您對群組或角色套用政策的效果，以確保它可如預期運作。您有很多種方法可以執行此操作。例如，若要測試類似以上所示的政策，您可以：
+ 使用已套用政策的 IAM 群組成員身分的 IAM 使用者登入 CodeCommit 主控台，或擔任已套用政策的角色。在主控台中，於套用限制的分支上新增檔案。嘗試將檔案儲存或上傳到該分支時，您應該會看到錯誤訊息。將檔案新增到不同分支。操作應該會成功。
+ 使用已套用政策的 IAM 群組成員身分的 IAM 使用者登入 CodeCommit 主控台，或擔任已套用政策的角色。建立提取請求，其將合併到限制適用所在的分支。您應該可以建立提取請求，但在嘗試合併它時發生錯誤。
+ 從終端機或命令列，在套用限制的分支上建立遞交，然後將該遞交推送到 CodeCommit 儲存庫。您應該會看到錯誤訊息。從其他分支進行的遞交和推送應該可以照常運作。