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

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

基于身份的策略 (IAM) 示例

您可以将策略附加到IAM身份。例如,您可以执行以下操作:

  • 将@@ 权限策略附加到您账户中的用户或群组-要授予用户在 CodePipeline 控制台中查看管道的权限,您可以将权限策略附加到该用户所属的用户或群组。

  • 将@@ 权限策略附加到角色(授予跨账户权限)-您可以将基于身份的权限策略附加到IAM角色以授予跨账户权限。例如,账户 A 中的管理员可以创建一个角色来向另一个 AWS 账户(例如账户 B)或授予跨账户权限, AWS 服务 如下所示:

    1. 账户 A 管理员创建一个IAM角色并向该角色附加权限策略,该策略授予账户 A 中资源的权限。

    2. 账户 A 管理员可以把信任策略附加至用来标识账户 B 的角色,账户 B 由此可以作为主体代入该角色。

    3. 然后,账户 B 管理员可以将代入该角色的权限委托给账户 B 中的任何用户。这样,账户 B 中的用户就可以创建或访问账户 A 中的资源。如果您想授予担任该角色的 AWS 服务 权限,则信任策略中的 AWS 服务 委托人也可以是委托人。

    有关使用委派权限IAM的更多信息,请参阅《IAM用户指南》中的访问管理

下面显示了一个权限策略的示例,该策略可以授权启用和禁用 us-west-2 region 区域名为 MyFirstPipeline 的管道中所有阶段之间的转换:

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

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

{ "Statement": [ { "Action": [ "codepipeline:GetPipeline", "codepipeline:GetPipelineState", "codepipeline:GetPipelineExecution", "codepipeline:ListPipelineExecutions", "codepipeline:ListActionExecutions", "codepipeline:ListActionTypes", "codepipeline:ListPipelines", "codepipeline:ListTagsForResource", "iam:ListRoles", "s3:ListAllMyBuckets", "codecommit:ListRepositories", "codedeploy:ListApplications", "lambda:ListFunctions", "codestar-notifications:ListNotificationRules", "codestar-notifications:ListEventTypes", "codestar-notifications:ListTargets" ], "Effect": "Allow", "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline" }, { "Action": [ "codepipeline:GetPipeline", "codepipeline:GetPipelineState", "codepipeline:GetPipelineExecution", "codepipeline:ListPipelineExecutions", "codepipeline:ListActionExecutions", "codepipeline:ListActionTypes", "codepipeline:ListPipelines", "codepipeline:ListTagsForResource", "iam:ListRoles", "s3:GetBucketPolicy", "s3:GetObject", "s3:ListBucket", "codecommit:ListBranches", "codedeploy:GetApplication", "codedeploy:GetDeploymentGroup", "codedeploy:ListDeploymentGroups", "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEnvironments", "lambda:GetFunctionConfiguration", "opsworks:DescribeApps", "opsworks:DescribeLayers", "opsworks:DescribeStacks" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "CodeStarNotificationsReadOnlyAccess", "Effect": "Allow", "Action": [ "codestar-notifications:DescribeNotificationRule" ], "Resource": "*", "Condition": { "StringLike": { "codestar-notifications:NotificationsForResource": "arn:aws:codepipeline:*" } } } ], "Version": "2012-10-17" }

创建此策略后,在 111222333444 账户中创建该IAM角色并将该策略附加到该角色。在角色的信任关系中,您必须添加将担任此角色的 AWS 账户。以下示例显示了一个策略,该策略允许用户来自 111111111111 AWS 用于承担在 111222333444 账户中定义的角色的帐户:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "sts:AssumeRole" } ] }

以下示例显示了在中创建的策略 111111111111 AWS 允许用户扮演名为的角色的帐户 CrossAccountPipelineViewers 在 111222333444 账户中:

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

您可以创建IAM策略来限制您账户中的用户有权访问的呼叫和资源,然后将这些策略附加到您的管理用户。有关如何创建IAM角色和浏览IAM策略声明示例的更多信息 CodePipeline,请参阅客户管理型策略示例