

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 客户管理型策略示例
<a name="customer-managed-policies"></a>

您可以创建自己的自定义 IAM 策略以授予 CodeCommit 操作和资源的权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。您还可以创建自己的自定义 IAM 策略，以便在与其他 AWS 服务 CodeCommit 之间进行集成。

**Topics**
+ [客户管理型身份策略示例](#customer-managed-policies-identity)

## 客户管理型身份策略示例
<a name="customer-managed-policies-identity"></a>

以下示例 IAM 策略授予各种 CodeCommit 操作的权限。使用它们来限制您的 IAM 用户和角色的 CodeCommit 访问权限。这些策略控制使用控制 CodeCommit 台 AWS SDKs、API 或执行操作的能力 AWS CLI。



**注意**  
所有示例都使用美国西部（俄勒冈）区域 (us-west-2)，并包含虚构账户。 IDs

 **示例**
+ [示例 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 策略权限适用于从中检索数据的任何 Git 客户端命令，包括 CodeCommit**git fetch****git clone**、等。同样，`GitPush`IAM 策略权限适用于向其发送数据的任何 Git 客户端命令 CodeCommit。例如，如果 `GitPush` IAM policy 权限设置为 `Allow`，则用户可以使用 Git 协议推送分支删除。针对该 IAM 用户的 `DeleteBranch` 操作应用的任何权限都不会影响该推送。该`DeleteBranch`权限适用于使用控制台、、和 API 执行的 AWS CLI操作 SDKs，但不适用于使用 Git 协议执行的操作。

以下示例允许指定用户从名为的存储库中提取和推送到该 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 存储库。可通过两种等效方法来实现此目的。您可以创建一个`Deny`在用户的 IP 地址不在特定区块内时禁止 CodeCommit 操作的`Allow`策略，也可以创建允许在用户的 IP 地址位于特定区块内时进行 CodeCommit 操作的策略。

您可以创建 `Deny` 策略，拒绝在特定 IP 范围之外的所有用户的访问。例如，您可以向需要访问存储库的所有用户附加 AWSCodeCommitPowerUser 托管策略和客户托管策略。以下示例策略拒绝其 IP 地址不在指定 IP 地址块 203.0.113.0/16 内的用户的所有 CodeCommit 权限：

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

****  

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

------

以下示例策略仅允许指定用户的 IP 地址在指定的地址块 203.0.113.0/16 内时访问 MyDemoRepo 具有 AWSCodeCommitPowerUser 托管策略等效权限的 CodeCommit存储库：

------
#### [ 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)。

例如，您可以创建一个`Deny`策略，拒绝用户在名为的存储库中对名为 main 的分支进行更改，包括删除该分支{{MyDemoRepo}}。此策略可与 **AWSCodeCommitPowerUser** 托管策略结合使用。应用了这两个策略的用户将能够创建和删除分支、创建拉取请求以及允许的所有其他操作 **AWSCodeCommitPowerUser**，但他们无法将更改推送到名为 *main 的分支，也无法在 CodeCommit 控制台*的主**分支中添加或编辑文件，也无法将分支或拉取请求合并到*主*分支中。由于 `Deny` 应用于 `GitPush`，您必须在该策略中包含 `Null` 语句，当用户从本地存储库进行推送时，分析初始 `GitPush` 调用是否有效。

**提示**  
如果您希望创建一个策略，应用于您的 Amazon Web Services 账户的所有存储库中名为 *main* 的所有分支，对于 `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 账户的所有存储库中名为 main 的分支进行更改。它不允许更改任何其他分支。您可以将此策略与 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 标签密钥为 *Stat* us 且*密*钥值为 Secret 的任何存储库 CodeCommit 执行所有操作，然后将该策略应用于您为普通开发者创建的 IAM 群组 ({{Developers}})。然后，您需要确保在这些标记存储库上工作的开发人员不是该普通{{Developers}}群组的成员，而是属于未应用限制性策略的其他 IAM 群组 (*SecretDevelopers*)。

以下示例拒绝对标有 *Stat* us 密钥和密钥值为 S *ecret* 的存储库 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 执行操作。例如，以下策略仅允许对未使用指定标签标记的**AWSCodeCommitPowerUser**存储库 CodeCommit 执行操作，不同之处在于它只允许对未使用指定标签标记的存储库 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": "*"
    }
  ]
}
```

------