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

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

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

客户管理型策略示例

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

客户管理型身份策略示例

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

注意

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

示例

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

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

{ "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。例如,如果GitPushIAM策略权限设置为Allow,则用户可以使用 Git 协议推送分支的删除。该推送不受应用于该IAM用户DeleteBranch操作的任何权限的影响。该DeleteBranch权限适用于使用控制台、SDKs、和(但不是 Git 协议)执行的操作。 AWS CLI API

以下示例允许指定用户从名为的存储库中提取和推送到该 CodeCommit 存储库MyDemoRepo

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

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

您可以创建一个策略,仅当用户的 IP 地址在某个 IP 地址范围内时,才允许他们连接到 CodeCommit存储库。可通过两种等效方法来实现此目的。您可以创建一个Deny在用户的 IP 地址不在特定区块内时禁止 CodeCommit 操作的Allow策略,也可以创建允许在用户的 IP 地址位于特定区块内时进行 CodeCommit 操作的策略。

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

{ "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存储库:

{ "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:111111111111:MyDemoRepo", "Condition": { "IpAddress": { "aws:SourceIp": [ "203.0.113.0/16" ] } } } ] }

示例 4:拒绝或允许对分支执行操作

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

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

提示

如果您要创建适用于您的 Amazon Web Services 账户中所有存储库中名为 ma in 的所有分支的策略Resource,请为指定星号 (*) 而不是存储库ARN。

{ "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。

{ "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 执行所有操作:

{ "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

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

客户管理型集成策略示例

本节提供了客户管理的用户策略示例,这些策略授予与其他 AWS 服务 CodeCommit 之间的集成的权限。有关允许跨账户访问 CodeCommit仓库的策略的具体示例,请参阅使用角色配置对 AWS CodeCommit 仓库的跨账户访问权限

注意

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

示例

示例 1:创建允许跨账户访问亚马逊SNS主题的策略

您可以配置 CodeCommit 存储库,以便代码推送或其他事件触发操作,例如从亚马逊简单通知服务 (AmazonSNS) 发送通知。如果您使用用于创建 CodeCommit存储库的相同账户创建 Amazon SNS 主题,则无需配置其他IAM策略或权限。您可以创建主题,然后为存储库创建触发器。有关更多信息,请参阅 为 Amazon SNS 主题创建触发器

但是,如果您想将触发器配置为使用另一个 Amazon SNS Web Services 账户中的亚马逊主题,则必须先使用允许 CodeCommit 向该主题发布内容的策略配置该主题。在其他账户中,打开 Amazon SNS 控制台,从列表中选择主题,对于其他主题操作,选择编辑主题策略。在 “高级” 选项卡上,修改该主题的策略以允许 CodeCommit 向该主题发布内容。例如,如果该策略是默认策略,则应按如下方式修改策略,更改中的项目 red italic text 要匹配您的存储库、Amazon SNS 主题和账户的值,请执行以下操作:

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "sns:Subscribe", "sns:ListSubscriptionsByTopic", "sns:DeleteTopic", "sns:GetTopicAttributes", "sns:Publish", "sns:RemovePermission", "sns:AddPermission", "sns:SetTopicAttributes" ], "Resource": "arn:aws:sns:us-east-2:111111111111:NotMySNSTopic", "Condition": { "StringEquals": { "AWS:SourceOwner": "111111111111" } } }, { "Sid": "CodeCommit-Policy_ID", "Effect": "Allow", "Principal": { "Service": "codecommit.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111111111111:NotMySNSTopic", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "AWS:SourceAccount": "111111111111" } } } ] }

示例 2:创建亚马逊简单通知服务 (AmazonSNS) 主题策略以允许 Amazon CloudWatch Events 向该主题发布 CodeCommit 事件

您可以将 CloudWatch 事件配置为在事件(包括 CodeCommit 事件)发生时发布到 Amazon SNS 主题。为此,您必须通过为该 CloudWatch SNS主题创建策略或修改与以下内容类似的现有策略来确保 Events 有权将事件发布到您的 Amazon 主题:

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic", "Condition": { "StringEquals": { "AWS:SourceOwner": "123456789012" } } }, { "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }

有关 CodeCommit 和 CloudWatch 事件的更多信息,请参阅支持的服务中的CloudWatch 事件事件示例。有关策略语言IAM的更多信息,请参阅IAMJSON政策语言语法

示例 3:创建与 CodeCommit 触发器 AWS Lambda 集成的策略

您可以配置 CodeCommit 存储库,以便代码推送或其他事件触发操作,例如在中 AWS Lambda调用函数。有关更多信息,请参阅 为 Lambda 函数创建触发器。此信息特定于触发器,而不是 CloudWatch 事件。

如果您希望触发器直接运行 Lambda 函数(而不是使用 Amazon SNS 主题来调用 Lambda 函数),并且您没有在 Lambda 控制台中配置触发器,则必须在函数的基于资源的策略中包含与以下内容类似的语句:

{ "Statement":{ "StatementId":"Id-1", "Action":"lambda:InvokeFunction", "Principal":"codecommit.amazonaws.com", "SourceArn":"arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "SourceAccount":"111111111111" } }

手动配置调用 Lambda 函数的 CodeCommit 触发器时,您还必须使用 Lambda AddPermission命令授予调用该函数的权限。 CodeCommit 有关示例,请参阅为现有的 Lambda 函数创建触发器 CodeCommit 允许运行 Lambda 函数部分。

有关 Lambda 函数资源策略的更多信息,请参阅AddPermission开发人员指南中的拉取/推送事件模型。AWS Lambda