客户管理型策略示例 - AWS CodeCommit

AWS CodeCommit 现已不再向新客户提供。AWS CodeCommit 的现有客户可以继续正常使用该服务。了解更多

客户管理型策略示例

此外,您还可以创建您自己的自定义 IAM policy,以向 CodeCommit 操作和资源授予相关权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。您还可以创建自己的自定义 IAM policy,以便集成 CodeCommit 和其他 AWS 服务。

客户管理型身份策略示例

以下 IAM policy 示例为各种 CodeCommit 操作授予权限。使用它们来限制 IAM 用户和角色对 CodeCommit 的访问。这些策略控制使用 CodeCommit 控制台、API、AWS 软件开发工具包或 AWS CLI 执行操作的能力。

注意

所有示例都使用 美国西部(俄勒冈)区域 (us-west-2) 和虚构的账户 ID。

示例

示例 1:允许用户在单个 AWS 区域中执行 CodeCommit 操作

以下权限策略使用通配符 ("codecommit:*") 以允许用户在 us-east-2 区域中(而不是在其他 AWS 区域中)执行所有 CodeCommit 操作。

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

在 CodeCommit 中,GitPull IAM policy 权限适用于从 CodeCommit 检索数据的任何 Git 客户端命令,包括 git fetchgit clone 等。同样,GitPush IAM policy 权限适用于将数据发送到 CodeCommit 的任何 Git 客户端命令。例如,如果 GitPush IAM policy 权限设置为 Allow,则用户可以使用 Git 协议推送分支删除。针对该 IAM 用户的 DeleteBranch 操作应用的任何权限都不会影响该推送。DeleteBranch 权限适用于通过控制台、AWS CLI、软件开发工具包和 API 执行的操作,但不适用于通过 Git 协议执行的操作。

下面的示例允许指定用户对名为 MyDemoRepo 的 CodeCommit 存储库执行拉取和推送操作:

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

示例 3:允许从指定 IP 地址范围连接的用户访问存储库

您可以创建一个策略,仅允许 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" ] } } } ] }

下面的示例策略允许指定用户访问名为 MyDemoRepo 的 CodeCommit 存储库,只有当他们的 IP 地址位于指定的地址块 203.0.113.0/16 内时,才具有与 AWSCodeCommitPowerUser 托管式策略同等的权限:

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:拒绝或允许对分支执行操作

您可以创建一条策略,拒绝用户在一个或多个分支上执行指定操作的权限。或者,您可以创建一条策略,允许在一个或多个分支上执行某些操作,但在该存储库的其他分支上则不允许执行这些操作。这些策略可与相应的托管 (预定义) 策略结合使用。有关更多信息,请参阅 在 AWS CodeCommit 中限制针对分支的推送和合并

例如,您可以创建一个 Deny 策略,拒绝用户更改名为 MyDemoRepo 的存储库中名为 main 的分支,包括删除该分支。您可以将此策略与 AWSCodeCommitPowerUser 托管式策略一起使用。应用了这两个策略的用户可以创建和删除分支、创建拉取请求,还可以执行 AWSCodeCommitPowerUser 允许的所有其他操作,但不能将更改推送到名为 main 的分支、不能在 CodeCommit 控制台中添加或编辑 main 分支中的文件,也不能将分支或拉取请求合并到 main 分支。由于 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 托管式策略结合使用,以允许自动推送到 main 分支中的存储库。由于效果为 Allow,所以此示例策略无法与 AWSCodeCommitPowerUser 这样的托管式策略结合使用。

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

示例 5:使用标签拒绝或允许对存储库执行操作

您可以根据与存储库相关联的 AWS 标签创建允许或拒绝对存储库执行操作的策略,然后将这些策略应用到您为管理 IAM 用户而配置的 IAM 组。例如,您可以创建一个策略,拒绝对 AWS 标签键为 Status 且键值为 Secret 的任何存储库执行所有 CodeCommit 操作,然后将该策略应用到您为普通开发人员创建的 IAM 组(开发人员)。然后,您需要确保在标记的存储库上工作的开发人员不是一般开发人员组的成员,而是属于另一个没有应用限制性策略的 IAM 组 (SecretDevelopers)。

以下示例拒绝对用键 Status 和键值 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

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": "*" } ] }