

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

# 客戶管理政策範例
<a name="customer-managed-policies"></a>

您可以建立自己的自訂 IAM 政策，以允許 CodeCommit 動作和資源的許可。您可以將這些自訂政策連接至需要這些許可的 IAM 使用者或群組。您也可以建立自己的自訂 IAM 政策，以在 CodeCommit 和其他 AWS 服務之間進行整合。

**Topics**
+ [客戶受管身分政策範例](#customer-managed-policies-identity)

## 客戶受管身分政策範例
<a name="customer-managed-policies-identity"></a>

下列範例 IAM 政策會授予各種 CodeCommit 動作的許可。使用它們來限制 IAM 使用者和角色的 CodeCommit 存取。這些政策控制使用 CodeCommit 主控台、API、 AWS SDKs或 執行動作的能力 AWS CLI。



**注意**  
所有範例皆使用美國西部 (奧勒岡) 區域 (us-west-2) 並包含虛構帳戶 ID。

 **範例**
+ [範例 1：允許使用者在單一 中執行 CodeCommit 操作 AWS 區域](#identity-based-policies-example-1)
+ [範例 2：允許使用者將 Git 用於單一儲存庫](#identity-based-policies-example-2)
+ [範例 3：允許使用者從指定的 IP 地址範圍連線到儲存庫](#identity-based-policies-example-3)
+ [範例 4：拒絕或允許分支上的動作](#identity-based-policies-example-4)
+ [範例 5：在具有標籤的儲存庫上拒絕或允許動作](#identity-based-policies-example-5)

### 範例 1：允許使用者在單一 中執行 CodeCommit 操作 AWS 區域
<a name="identity-based-policies-example-1"></a>

下列許可政策使用萬用字元 (`"codecommit:*"`)，允許使用者在 us-east-2 區域中執行所有 CodeCommit 動作，而不是從其他區域執行 AWS 區域。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "codecommit:*",
            "Resource": "arn:aws:codecommit:us-east-2:111111111111:*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "us-east-2"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "codecommit:ListRepositories",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "us-east-2"
                }
            }
        }
    ]
}
```

------

### 範例 2：允許使用者將 Git 用於單一儲存庫
<a name="identity-based-policies-example-2"></a>

在 CodeCommit `GitPull` 中，IAM 政策許可適用於從 CodeCommit 擷取資料的任何 Git 用戶端命令，包括 **git fetch**、 **git clone**等。同樣地，IAM `GitPush` 政策許可適用於將資料傳送至 CodeCommit 的任何 Git 用戶端命令。例如，如果 IAM `GitPush` 政策許可設定為 `Allow`，使用者可以使用 Git 通訊協定推送分支的刪除。該推送不受套用至該 IAM 使用者`DeleteBranch`操作的任何許可影響。`DeleteBranch` 許可適用於使用 主控台、、 AWS CLI開發套件和 API 執行的動作，但不適用於 Git 通訊協定。 SDKs 

下列範例允許指定的使用者提取和推送名為 的 CodeCommit 儲存庫`MyDemoRepo`：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "codecommit:GitPull",
        "codecommit:GitPush"
      ],
      "Resource" : "arn:aws:codecommit:us-east-2:{{111122223333}}:MyDemoRepo"
    }
  ]
}
```

------

### 範例 3：允許使用者從指定的 IP 地址範圍連線到儲存庫
<a name="identity-based-policies-example-3"></a>

您可以建立政策，只在使用者 IP 地址位於特定 IP 地址範圍內時，才允許使用者連線至 CodeCommit 儲存庫。這有兩種同樣有效的方法。如果使用者的 IP 地址不在特定區塊內，您可以建立不允許 CodeCommit 操作`Deny`的政策，或者如果使用者的 IP 地址位於特定區塊內，您可以建立允許 CodeCommit 操作`Allow`的政策。

您可以建立 `Deny` 政策，以拒絕所有不在特定 IP 範圍內的使用者存取。例如，您可以將 AWSCodeCommitPowerUser 受管政策和客戶受管政策連接到需要存取儲存庫的所有使用者。下列範例政策拒絕 IP 地址不在 203.0.113.0/16 指定 IP 地址區塊內之使用者的所有 CodeCommit 許可：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Deny",
         "Action": [
            "codecommit:*"
         ],
         "Resource": "*",
         "Condition": {
            "NotIpAddress": {
               "aws:SourceIp": [
                  "203.0.113.0/16"
               ]
            }
         }
      }
   ]
}
```

------

下列範例政策允許指定使用者存取名為 MyDemoRepo 的 CodeCommit 儲存庫，其具有 AWSCodeCommitPowerUser 受管政策的同等許可，前提是其 IP 地址位於 203.0.113.0/16 的指定地址區塊內：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "codecommit:BatchGetRepositories",
            "codecommit:CreateBranch",
            "codecommit:CreateRepository",
            "codecommit:Get*",
            "codecommit:GitPull",
            "codecommit:GitPush",
            "codecommit:List*",
            "codecommit:Put*",
            "codecommit:Post*",
            "codecommit:Merge*",
            "codecommit:TagResource",
            "codecommit:Test*",
            "codecommit:UntagResource",
            "codecommit:Update*"
         ],
         "Resource": "arn:aws:codecommit:us-east-2:{{111122223333}}:MyDemoRepo",
         "Condition": {
            "IpAddress": {
               "aws:SourceIp": [
                  "203.0.113.0/16"
               ]
            }
         }
      }
   ]
}
```

------



### 範例 4：拒絕或允許分支上的動作
<a name="identity-based-policies-example-4"></a>

您可以建立政策，對使用者拒絕在一或多個分支執行您指定動作的許可。或者，您可以建立政策，以允許他們原本在儲存庫的其他分支上可能沒有的一或多個分支上執行動作。您可以使用這些政策搭配適當的受管 (預先定義) 政策。如需詳細資訊，請參閱[限制 中的分支推送和合併 AWS CodeCommit](how-to-conditional-branch.md)。

例如，您可以在名為 {{MyDemoRepo}} 的儲存庫中建立`Deny`政策，拒絕使用者變更名為 Main 的分支，包括刪除該分支。您可以將此政策與 **AWSCodeCommitPowerUser** 受管政策搭配使用。套用這兩個政策的使用者將能夠建立和刪除分支、建立提取請求，以及 **AWSCodeCommitPowerUser** 所允許的所有其他動作，但無法將變更推送至名為*主要*的分支、在 CodeCommit 主控台*的主要*分支中新增或編輯檔案，或將分支或提取請求合併至*主要*分支。由於 `Deny` 套用到 `GitPush`，您必須在政策中包含 `Null` 陳述式，以便使用者從本機儲存庫推送時，允許分析初始 `GitPush` 呼叫的有效性。

**提示**  
如果您想要建立套用至 Amazon Web Services 帳戶中所有儲存庫中名稱為*主要*的所有分支的政策，請為 指定星號 `*` ()`Resource`，而非儲存庫 ARN。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "codecommit:GitPush",
                "codecommit:DeleteBranch",
                "codecommit:PutFile",
                "codecommit:Merge*"
            ],
            "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/main"   
                    ]
                },
                "Null": {
                    "codecommit:References": "false"
                }
            }
        }
    ]
}
```

------

下列範例政策允許使用者變更 Amazon Web Services 帳戶中所有儲存庫中名為主要的分支。它不允許對任何其他分支進行變更。您可以將此政策與 AWSCodeCommitReadOnly 受管政策搭配使用，以允許自動推送至主分支中的儲存庫。由於效果為 `Allow`，此範例政策不適用於受管政策，例如 AWSCodeCommitPowerUser。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codecommit:GitPush",
                "codecommit:Merge*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/main"
                    ]
                }
            }
        }
    ]
}
```

------



### 範例 5：在具有標籤的儲存庫上拒絕或允許動作
<a name="identity-based-policies-example-5"></a>

您可以建立政策，根據與這些儲存庫相關聯的 AWS 標籤，允許或拒絕儲存庫上的動作，然後將這些政策套用到您為管理 IAM 使用者所設定的 IAM 群組。例如，您可以建立政策，以拒絕任何儲存庫上具有 AWS 標籤金鑰*狀態*和金鑰值 *Secret* 的所有 CodeCommit 動作，然後將該政策套用至您為一般開發人員 ({{開發人員}}) 建立的 IAM 群組。然後，您需要確保處理這些標記儲存庫的開發人員不是該一般{{開發人員}}群組的成員，而是屬於未套用限制性政策的不同 IAM 群組 (*SecretDevelopers*)。

下列範例會拒絕標記金鑰*狀態*和金鑰值為 *Secret* 之儲存庫的所有 CodeCommit 動作：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codecommit:Associate*",
        "codecommit:Batch*",
        "codecommit:CancelUploadArchive",
        "codecommit:CreateBranch",
        "codecommit:CreateCommit",
        "codecommit:CreatePullRequest*",
        "codecommit:CreateRepository",
        "codecommit:CreateUnreferencedMergeCommit",
        "codecommit:DeleteBranch",
        "codecommit:DeleteCommentContent",
        "codecommit:DeleteFile",
        "codecommit:DeletePullRequest*",
        "codecommit:DeleteRepository",
        "codecommit:Describe*",
        "codecommit:DisassociateApprovalRuleTemplateFromRepository",
        "codecommit:EvaluatePullRequestApprovalRules",
        "codecommit:GetBlob",
        "codecommit:GetBranch",
        "codecommit:GetComment*",
        "codecommit:GetCommit",
        "codecommit:GetDifferences*",
        "codecommit:GetFile",
        "codecommit:GetFolder",
        "codecommit:GetMerge*",
        "codecommit:GetObjectIdentifier",
        "codecommit:GetPullRequest*",
        "codecommit:GetReferences",
        "codecommit:GetRepository*",
        "codecommit:GetTree",
        "codecommit:GetUploadArchiveStatus",
        "codecommit:Git*",
        "codecommit:ListAssociatedApprovalRuleTemplatesForRepository",
        "codecommit:ListBranches",
        "codecommit:ListPullRequests",
        "codecommit:ListTagsForResource",
        "codecommit:Merge*",
        "codecommit:OverridePullRequestApprovalRules",
        "codecommit:Post*",
        "codecommit:Put*",
        "codecommit:TagResource",
        "codecommit:TestRepositoryTriggers",
        "codecommit:UntagResource",
        "codecommit:UpdateComment",
        "codecommit:UpdateDefaultBranch",
        "codecommit:UpdatePullRequest*",
        "codecommit:UpdateRepository*",
        "codecommit:UploadArchive"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Status": "Secret"
        }
      }
    }
  ]
}
```

------

您可以將特定儲存庫指定為資源，而非所有儲存庫，以進一步精簡此策略。您也可以建立政策，允許 CodeCommit 對未標記特定標籤的所有儲存庫執行動作。例如，下列政策允許 CodeCommit 動作的同等 **AWSCodeCommitPowerUser** 許可，但只允許未標記指定標籤的儲存庫上的 CodeCommit 動作：

**注意**  
此政策範例僅包含 CodeCommit 的動作。它不包括包含在 **AWSCodeCommitPowerUser** 受管政策中 AWS 其他服務的動作。如需詳細資訊，請參閱 [AWS 受管政策：AWSCodeCommitPowerUser](security-iam-awsmanpol.md#managed-policies-poweruser)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:Associate*",
        "codecommit:Batch*",
        "codecommit:CancelUploadArchive",
        "codecommit:CreateBranch",
        "codecommit:CreateCommit",
        "codecommit:CreatePullRequest*",
        "codecommit:CreateRepository",
        "codecommit:CreateUnreferencedMergeCommit",
        "codecommit:DeleteBranch",
        "codecommit:DeleteCommentContent",
        "codecommit:DeleteFile",
        "codecommit:DeletePullRequest*",
        "codecommit:Describe*",
        "codecommit:DisassociateApprovalRuleTemplateFromRepository",
        "codecommit:EvaluatePullRequestApprovalRules",
        "codecommit:GetBlob",
        "codecommit:GetBranch",
        "codecommit:GetComment*",
        "codecommit:GetCommit",
        "codecommit:GetDifferences*",
        "codecommit:GetFile",
        "codecommit:GetFolder",
        "codecommit:GetMerge*",
        "codecommit:GetObjectIdentifier",
        "codecommit:GetPullRequest*",
        "codecommit:GetReferences",
        "codecommit:GetRepository*",
        "codecommit:GetTree",
        "codecommit:GetUploadArchiveStatus",
        "codecommit:Git*",
        "codecommit:ListAssociatedApprovalRuleTemplatesForRepository",
        "codecommit:ListBranches",
        "codecommit:ListPullRequests",
        "codecommit:ListTagsForResource",
        "codecommit:Merge*",
        "codecommit:OverridePullRequestApprovalRules",
        "codecommit:Post*",
        "codecommit:Put*",
        "codecommit:TagResource",
        "codecommit:TestRepositoryTriggers",
        "codecommit:UntagResource",
        "codecommit:UpdateComment",
        "codecommit:UpdateDefaultBranch",
        "codecommit:UpdatePullRequest*",
        "codecommit:UpdateRepository*",
        "codecommit:UploadArchive"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Status": "Secret",
          "aws:ResourceTag/Team": "Saanvi"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:CreateApprovalRuleTemplate",
        "codecommit:GetApprovalRuleTemplate",
        "codecommit:ListApprovalRuleTemplates",
        "codecommit:ListRepositories",
        "codecommit:ListRepositoriesForApprovalRuleTemplate",
        "codecommit:UpdateApprovalRuleTemplateContent",
        "codecommit:UpdateApprovalRuleTemplateDescription",
        "codecommit:UpdateApprovalRuleTemplateName"
      ],
      "Resource": "*"
    }
  ]
}
```

------