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

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

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

客户管理型策略示例

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

客户管理型身份策略示例

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

注意

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

示例

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

以下权限策略使用通配符 ("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

在中 CodeCommit,GitPullIAM 策略权限适用于从中检索数据的任何 Git 客户端命令,包括 CodeCommitgit fetchgit clone、等。同样,GitPushIAM 策略权限适用于向其发送数据的任何 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 地址范围连接的用户访问存储库

您可以创建策略来只允许其 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:拒绝或允许对分支执行操作

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

例如,您可以创建一个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:使用标签拒绝或允许对存储库执行操作

您可以根据与存储库关联的 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

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