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

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

客户管理的策略示例

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

客户托管身份策略示例

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

注意

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

示例

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

下面的示例允许指定用户对名为的 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" ] } } } ] }

下面的示例策略允许具有 AWSCodeCommitPowerUser 托管策略等效权限的指定用户在 IP 地址位于指定的地址块 203.0.113.0/16 内时访问名为 MyDemoRepo 的 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 的分支,包括删除该分支。MyDemoRepo. 您可以将此策略用于awscodeCommit PowerUser托管策略。应用了这两个策略的用户将能够创建和删除分支、创建拉取请求以及所有其他允许的操作awscodeCommit PowerUser,但他们无法将更改推送到名为的分支主色在中添加或编辑文件主色CodeCommit 控制台中的分支,或者将分支或拉取请求合并到主色分支机构。由于 Deny 应用于 GitPush,您必须在该策略中包含 Null 语句,当用户从本地存储库进行推送时,分析初始 GitPush 调用是否有效。

提示

如果你想创建一个适用于名为的所有分支的策略主色在您的 Amazon Web Services 账户中的所有仓库中,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 的分支。它不允许更改任何其他分支。您可以将此策略与 AWSCOdeCommit ReadOnly 托管策略结合使用,以允许自动推送到主分支中的存储库。因为效果是Allow,此示例策略无法与 AWS CodeCommit PowerUser 这样的托管策略结合使用。

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

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

您可以创建一个使用AWS与这些存储库关联的标签,然后将该策略应用于为管理 IAM 用户而配置的 IAM 组。例如,您可以创建一个策略,以拒绝对任何存储库执行的所有 CodeCommit 操作,AWS标签键状态和的关键价值密钥,然后将该策略应用于您为普通开发人员创建的 IAM 组(开发人员)。然后,您需要确保使用这些带有标签的存储库的开发人员不是该常规的成员。开发人员组,而是属于未应用限制性策略的其他 IAM 组(SecretDevelopers)。

以下示例拒绝对用键标记的存储库执行所有 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" } } } ] }

您可以指定特定存储库(而不是所有存储库)以进一步优化该策略。您还可以创建策略以允许对未使用特定标签标记的所有存储库执行操作。例如,以下策略允许等效于awscodeCommit PowerUser权限对于 CodeCommit 操作,除了它只允许在仓库上执行 CodeCommit 操作不使用指定的标签进行标签:

注意

此策略示例仅包括 CodeCommit 的操作。其中不包含对其他操作AWS包含在awscodeCommit PowerUser托管策略。有关更多信息,请参阅AWS托管策略:awscodeCommit PowerUser

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

客户托管式集成策略示例

本节提供的示例客户托管用户策略授予在 CodeCommit 和其他方面进行集成的权限。AWS服务。有关允许对 CodeCommit 存储库进行跨账户访问的特定策略示例,请参阅。配置对的跨账户访问AWS CodeCommit使用角色存储库.

注意

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

示例

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

您可以配置 CodeCommit 存储库以使代码推送或其他事件能够触发操作,例如从 Amazon Simple Notification Service (Amazon SNS) 发送通知。如果您使用创建 CodeCommit 存储库的账户创建 Amazon SNS 主题,则无需配置其他 IAM 策略或权限。您可以创建主题,然后为存储库创建触发器。有关更多信息,请参阅为 Amazon SNS 主题创建触发器

但是,如果要将触发器配置为使用其他 Amazon Web Services 账户中的 Amazon SNS 主题,则必须先为该主题配置允许 CodeCommit 向该主题发布内容的策略。从其他账户打开 Amazon SNS 控制台,从列表中选择该主题,然后对于其他主题操作,选择编辑主题策略. 在存储库的Advanced选项卡中,修改该主题的策略,以允许 CodeCommit 向该主题发布内容。例如,如果该策略是默认策略,则您可以按照以下方式修改策略,更改中的项目:红色斜体要匹配仓库、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:创建 Amazon Simple Notification Service (Amazon SNS) 主题策略以允许 Amazon CloudWatch Events 向主题发布 CodeCommit 事件。

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

{ "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 和策略语言的更多信息,请参阅。IAM JSON 策略语言的语法.

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

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

如果您需要让触发器直接运行 Lambda 函数(而不是使用 Amazon SNS 主题调用 Lambda 函数),而且您未在 Lambda 控制台中配置该触发器,则必须包含statement类似于函数资源中的以下内容基于策略:

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

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

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