AWS CodePipeline 基于身份的策略示例 - AWS CodePipeline

AWS CodePipeline 基于身份的策略示例

默认情况下,IAM 用户和角色没有创建或修改 CodePipeline 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅《IAM 用户指南》中的 在 JSON 选项卡上创建策略

要了解如何创建使用其它账户资源的管道以及相关的示例策略,请参阅在 CodePipeline 中创建使用另一个 AWS 账户中的资源的管道

客户管理型策略示例

本节的用户策略示例介绍如何授予各 CodePipeline 操作的权限。当您使用 CodePipeline API、AWS SDK 或 AWS CLI 时,可以使用这些策略。当您使用控制台时,您必须授予特定于控制台的其他权限。有关更多信息,请参阅 使用 CodePipeline 控制台所需的权限

注意

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

示例

示例 1:授予获取管道状态的权限

以下示例将授予获取名为 MyFirstPipeline 的管道状态的权限:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:GetPipelineState" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline" } ] }

示例 2:授予启用和禁用阶段之间的过渡的权限

以下示例授予禁用和启用名为 MyFirstPipeline 的管道中所有阶段之间的过渡的权限:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:DisableStageTransition", "codepipeline:EnableStageTransition" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline/*" } ] }

要允许用户禁用和启用管道中单个阶段的过渡,您必须指定该阶段。例如,为了允许用户启用和禁用名为 Staging 的管道中 MyFirstPipeline 阶段的过渡:

"Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline/Staging"

示例 3:授予获取所有可用操作类型列表的权限

以下示例授予获取可用于 us-west-2 区域中的管道的所有操作类型列表的权限:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:ListActionTypes" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:actiontype:*" } ] }

示例 4:授予批准或拒绝手动审批操作的权限

以下示例授予批准或拒绝名为 Staging 的管道中 MyFirstPipeline 阶段的手动审批操作的权限:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PutApprovalResult" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline/Staging/*" } ] }

示例 5:授予轮询作业以查找自定义操作的权限

以下示例授予轮询所有管道中的作业以查找名为 TestProvider 的自定义操作的权限,该操作是第一个版本中的 Test 操作类型:

注意

自定义操作的作业辅助角色可以在不同的 AWS 账户下配置,或者需要特定的 IAM 角色才能运行。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForJobs" ], "Resource": [ "arn:aws:codepipeline:us-west-2:111222333444:actionType:Custom/Test/TestProvider/1" ] } ] }

示例 6:附加或编辑 Jenkins 与 AWS CodePipeline 集成的策略

如果配置一个管道以使用 Jenkins 进行构建或测试,请为该集成创建单独的身份,并附加一项 IAM 策略,该策略应具有 Jenkins 和 CodePipeline 间集成所需的最低权限。此策略与 AWSCodePipelineCustomActionAccess 托管策略相同。以下示例显示了一项 Jenkins 集成策略:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:AcknowledgeJob", "codepipeline:GetJobDetails", "codepipeline:PollForJobs", "codepipeline:PutJobFailureResult", "codepipeline:PutJobSuccessResult" ], "Resource": "*" } ] }

示例 7:配置对管道的跨账户访问

您可以为另一个 AWS 账户中的用户和组配置对管道的访问。建议的方法是在创建管道的账户中创建角色。该角色应允许来自其他 AWS 账户的用户代入该角色并访问管道。有关更多信息,请参阅演练:使用角色进行跨账户访问

以下示例显示了 80398EXAMPLE 账户中的一项策略,该策略允许用户在 CodePipeline 控制台中查看,但不能更改名为 MyFirstPipeline 的管道。该策略基于 AWSCodePipeline_ReadOnlyAccess 托管策略,但由于它特定于 MyFirstPipeline 管道,因此无法直接使用托管策略。如果您不想将策略限制于某特定管道,则应该考虑使用由 CodePipeline 创建和维护的托管式策略之一。有关更多信息,请参阅使用管理的策略。您必须将该策略附加到您为进行访问而创建的 IAM 角色,例如名为 CrossAccountPipelineViewers 的角色:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:GetPipeline", "codepipeline:GetPipelineState", "codepipeline:ListActionTypes", "codepipeline:ListPipelines", "iam:ListRoles", "s3:GetBucketPolicy", "s3:GetObject", "s3:ListAllMyBuckets", "s3:ListBucket", "codedeploy:GetApplication", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEnvironments", "lambda:GetFunctionConfiguration", "lambda:ListFunctions" ], "Resource": "arn:aws:codepipeline:us-east-2:111122223333:MyFirstPipeline" } ] }

创建该策略后,在 80398EXAMPLE 账户中创建 IAM 角色并将该策略附加到该角色。在角色的信任关系中,您必须添加代入此角色的 AWS 账户。

以下示例显示了在 111111111111 AWS 账户中创建的一项策略,该策略允许用户代入 80398EXAMPLE 账户中名为 CrossAccountPipelineViewers 的角色:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/CrossAccountPipelineViewers" } ] }