本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS CodePipeline
基于身份的策略示例
默认情况下,IAM 用户和角色没有创建或修改 CodePipeline 资源的权限。他们也无法使用 AWS Management Console AWS CLI、或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。
要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅《IAM 用户指南》中的 在 JSON 选项卡上创建策略。
要了解如何创建使用其它账户资源的管道以及相关的示例策略,请参阅在中 CodePipeline 创建使用其他 AWS 账户资源的管道。
客户管理型策略示例
在本节中,您可以找到授予各种 CodePipeline 操作权限的用户策略示例。这些政策在您使用 CodePipeline API AWS SDKs、或时起作用 AWS CLI。当您使用控制台时,您必须授予特定于控制台的其他权限。有关更多信息,请参阅 使用 CodePipeline 控制台所需的权限。
所有示例都使用美国西部(俄勒冈)区域 (us-west-2
),并包含虚构账户。 IDs
示例
示例 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/*"
}
]
}
要允许用户禁用和启用管道中单个阶段的过渡,您必须指定该阶段。例如,为了允许用户启用和禁用名为 MyFirstPipeline
的管道中 Staging
阶段的过渡:
"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:授予批准或拒绝手动审批操作的权限
以下示例授予批准或拒绝名为 MyFirstPipeline
的管道中 Staging
阶段的手动审批操作的权限:
- 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 进行构建或测试,请为该集成创建单独的身份,并附上具有 Jenkins 和之间集成所需的最低权限的 IAM 策略。 CodePipeline此策略与 AWSCodePipelineCustomActionAccess
托管策略相同。以下示例显示了一项 Jenkins 集成策略:
- JSON
-
-
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"codepipeline:AcknowledgeJob",
"codepipeline:GetJobDetails",
"codepipeline:PollForJobs",
"codepipeline:PutJobFailureResult",
"codepipeline:PutJobSuccessResult"
],
"Resource": "*"
}
],
"Version": "2012-10-17"
}
示例 7:配置对管道的跨账户访问
您可以为另一个 AWS
账户中的用户和组配置对管道的访问。建议的方法是在创建管道的账户中创建角色。该角色应允许其他 AWS 账户的用户担任该角色并访问管道。有关更多信息,请参阅演练:使用角色进行跨账户访问。
以下示例显示了 80398EXAMPLE 账户中的一项策略,该策略允许用户查看但不能更改控制台MyFirstPipeline
中命名的管道。 CodePipeline 该策略基于 AWSCodePipeline_ReadOnlyAccess
托管策略,但由于它特定于 MyFirstPipeline
管道,因此无法直接使用托管策略。如果您不想将策略限制于某特定管道,则应该考虑使用 CodePipeline 创建和维护的托管策略之一。有关更多信息,请参阅使用管理的策略。您必须将该策略附加到您为进行访问而创建的 IAM 角色,例如名为 CrossAccountPipelineViewers
的角色:
- JSON
-
-
{
"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"
}
],
"Version": "2012-10-17"
}
创建该策略后,在 80398EXAMPLE 账户中创建 IAM 角色并将该策略附加到该角色。在角色的信任关系中,您必须添加担任此角色的 AWS 账户。以下示例显示了一个策略,该策略允许该111111111111
AWS 账户中的用户担任在 80398EXAMPLE 账户中定义的角色:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "codecommit:GetRepository",
"Resource": [
"arn:aws:codecommit:us-east-2:111122223333
:MySharedDemoRepo
"
]
}
]
}
以下示例显示了在该111111111111
AWS 账户中创建的策略,该策略允许用户代入 80398EXAMPLE 账户CrossAccountPipelineViewers
中指定的角色:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::111122223333
:role/CrossAccountPipelineViewers
"
}
]
}
示例 8:在管道中使用与另一个账户相关联的 AWS
资源
您可以配置策略,允许用户创建使用其他 AWS 账户资源的管道。这需要在创建管道的账户(AccountA)和已创建要在管道中使用的资源的账户(AccountB)中同时配置策略和角色。您还必须在中创建客户托管密钥 AWS Key Management Service 以用于跨账户访问。有关更多信息和 step-by-step示例,请参阅在中 CodePipeline 创建使用其他 AWS 账户资源的管道和为存储在 Amazon S3 中的项目配置服务器端加密 CodePipeline。
以下示例显示了 AccountA 为用于存储管道构件的 S3 存储桶配置的策略。该策略授予对 AccountB 的访问权限。在以下示例中,AccountB 的 ARN 是 012ID_ACCOUNT_B
。S3 存储桶的 ARN 为 codepipeline-us-east-2-1234567890
。将它们 ARNs替换 ARNs 为 S3 存储桶和您想要允许访问的账户:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "codecommit:GetRepository",
"Resource": [
"arn:aws:codecommit:us-east-2:111122223333
:MySharedDemoRepo
"
]
}
]
}
以下示例显示了 AccountA 配置的策略,该策略允许 AccountB 担任某个角色。此策略必须应用于 CodePipeline 的服务角色 (CodePipeline_Service_Role
)。有关如何将策略应用于 IAM 中的角色的更多信息,请参阅修改角色。在以下示例中,012ID_ACCOUNT_B
是 AccountB 的 ARN:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::111122223333
:role/*"
]
}
}
以下示例显示了由 AccountB 配置并应用于的EC2实例角色的策略。 CodeDeploy此策略授予对 AccountA 用于存储管道构件 (codepipeline-us-east-2-1234567890
) 的 S3 存储桶的访问权限:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket
/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket
"
]
}
]
}
以下示例显示了在 AccountA 中创建并配置为允许 AccountB 使用该密钥的客户托管密钥的 ARN 在 AWS KMS 何处arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
的策略:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey*",
"kms:Encrypt",
"kms:ReEncrypt*",
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:us-east-1:111122223333:key/2222222-3333333-4444-556677EXAMPLE
"
]
}
]
}
以下示例显示了由 AccountB 创建的 IAM 角色 (CrossAccount_Role
) 的内联策略,该策略允许访问 AccountA 中管道所需的 CodeDeploy 操作。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codedeploy:CreateDeployment",
"codedeploy:GetDeployment",
"codedeploy:GetDeploymentConfig",
"codedeploy:GetApplicationRevision",
"codedeploy:RegisterApplicationRevision"
],
"Resource": "*"
}
]
}
以下示例显示了由 AccountB 创建的 IAM 角色 (CrossAccount_Role
) 的内联策略,该策略允许访问 S3 桶,以便下载输入构件和上传输出构件:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject*",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket
/*"
]
}
]
}
有关如何编辑管道以跨账户访问资源的更多信息,请参阅步骤 2:编辑管道 。