AWS CodeDeploy 基于身份的策略示例 - AWS CodeDeploy
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS CodeDeploy 基于身份的策略示例

默认情况下, IAM 用户和角色没有创建或修改权限 CodeDeploy 资源。他们也不能使用 AWS 管理控制台, AWS CLI,或 AWS API。一个 IAM 管理员必须创建 IAM 授予用户和角色权限的策略,以便在所需的指定资源上执行API操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

学习如何创建 IAM 基于身份的策略使用这些示例JSON策略文档,请参阅 在JSON选项卡上创建策略IAM 用户指南.

在 CodeDeploy 中,基于身份的策略用于管理对与部署过程相关的多种权限。您可以控制对所有以下类型资源的访问:

  • 应用程序和应用程序修订。

  • 部署。

  • 部署配置。

  • 实例和本地实例。

由资源策略所控制的能力因资源类型而异,如下表所述:

资源类型

Capabilities

全部

查看和列出有关资源的详细信息

应用程序

部署配置。

部署组

创建资源

Delete resources

部署。

创建部署

停止部署

应用程序修订

注册应用程序修订

应用程序

部署组

更新资源

本地实例

向实例中添加标签

从实例中删除标签

注册实例

取消注册实例

以下示例显示了允许用户删除名称部署组的权限策略 WordPress_DepGroup 与名为 WordPress_Appus-west-2 地区。

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:DeleteDeploymentGroup" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE:deploymentgroup:WordPress_App/WordPress_DepGroup" ] } ] }

适用于 的 AWS 托管(预定义)策略CodeDeploy

AWS通过独立提供许多常用用例 IAM 创建和管理的政策 AWS. 这些 AWS 托管策略授予常用案例的必要权限,这样您不需要调查需要哪些权限。有关详细信息,请参阅 AWS管理策略IAM 用户指南.

以下 AWS 托管策略(可附加到账户中的用户)特定于 :CodeDeploy:

  • AWSCodeDeployFullAccess: :授与对 的完全访问权限。CodeDeploy.

    注意

    AWSCodeDeployFullAccess 不提供部署应用程序所需的其他服务的操作权限,例如 Amazon EC2 和 Amazon S3,仅适用于 CodeDeploy.

  • AWSCodeDeployDeployerAccess: :向 IAM 用户授予注册和部署修订的访问权限。

     

  • AWSCodeDeployReadOnlyAccess: :授予对 的只读访问权限。CodeDeploy.

     

  • AWSCodeDeployRole: 允许 CodeDeploy 通过其 Amazon EC2 标签或 Amazon EC2 Auto Scaling 组名称和本地实例按其本地实例标签,并相应地部署应用程序修订程序。提供发布通知到AN所需的权限 Amazon SNS 主题和检索 CloudWatch.

     

  • AWSCodeDeployRoleForLambda: 津贴 CodeDeploy 访问权限 AWS Lambda 以及部署所需的任何其他资源。

     

  • AWSCodeDeployRoleForECS: 津贴 CodeDeploy 访问权限 Amazon ECS 以及部署所需的任何其他资源。

     

  • AWSCodeDeployRoleForECSLimited: 津贴 CodeDeploy 访问权限 Amazon ECS 以及部署所需的任何其他资源,以下例外情况:

    • hooks 部分 AppSpec file仅限 Lambda 名称以 CodeDeployHook_ 可使用。有关更多信息,请参阅 AppSpec“挂钩”部分 Amazon ECS 部署.

    • S3桶的访问限制为带注册标签的S3存储桶, UseWithCodeDeploy的价值 true...有关详细信息,请参阅 对象标记.

部署流程的某些方面的权限被授予两种其他角色类型,该类型代表 CodeDeploy,而不是 IAM 用户:

  • IAM 实例配置文件:一种附加到 Amazon EC2 实例的 IAM 角色。此配置文件包含访问 Amazon S3 存储桶或 GitHub 存储库(其中存储将由 ∿ 部署的应用程序)所需的权限。有关更多信息,请参阅步骤 4. 为您的 Amazon EC2 实例

  • 服务角色:一种用于向 AWS 服务授予权限以便可访问 AWS 资源的 IAM 角色。附加到服务角色的策略将确定服务可访问的 AWS 资源以及可使用这些资源执行的操作。对于 CodeDeploy,服务角色用于:

    • 读取应用于实例的标记或与实例关联的 Amazon EC2 Auto Scaling 组名。这使 CodeDeploy 能够标识它可将应用程序部署到的实例。

    • 针对实例、Amazon EC2 Auto Scaling 组和 Elastic Load Balancing 负载均衡器执行操作。

    • 将信息发布到 Amazon SNS 主题,以便在发生指定的部署或实例事件时能够发送通知。

    • 检索有关 CloudWatch 警报的信息,以设置部署的警报监视。

    有关更多信息,请参阅 步骤 3:为 CodeDeploy 创建服务角色

您还可以创建自定义 IAM 授权权限的策略 CodeDeploy 行动和资源。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。

CodeDeploy 托管策略和通知

CodeDeploy 支持通知,使用户能够了解 deployments 的重要更改。CodeDeploy 托管策略包含通知功能的策略语句。有关更多信息,请参阅什么是通知?

完全访问托管策略中的通知的权限

AWSCodeDeployFullAccess 托管策略包含以下语句,以允许对通知进行完全访问。已应用此托管策略的用户还可以创建和管理通知的 Amazon SNS 主题、为用户订阅和取消订阅主题以及列出要选择作为通知规则目标的主题。

{ "Sid": "CodeStarNotificationsReadWriteAccess", "Effect": "Allow", "Action": [ "codestar-notifications:CreateNotificationRule", "codestar-notifications:DescribeNotificationRule", "codestar-notifications:UpdateNotificationRule", "codestar-notifications:DeleteNotificationRule", "codestar-notifications:Subscribe", "codestar-notifications:Unsubscribe" ], "Resource": "*", "Condition" : { "StringLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codedeploy:*"} } }, { "Sid": "CodeStarNotificationsListAccess", "Effect": "Allow", "Action": [ "codestar-notifications:ListNotificationRules", "codestar-notifications:ListTargets", "codestar-notifications:ListTagsforResource" ], "Resource": "*" }, { "Sid": "CodeStarNotificationsSNSTopicCreateAccess", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:SetTopicAttributes" ], "Resource": "arn:aws:sns:*:*:codestar-notifications*" }, { "Sid": "SNSTopicListAccess", "Effect": "Allow", "Action": [ "sns:ListTopics" ], "Resource": "*" }

只读托管策略中的通知的权限

AWSCodeDeployReadOnlyAccess 托管策略包含以下语句,以允许对通知进行只读访问。应用此托管策略的用户可以查看资源的通知,但无法创建、管理或订阅这些通知。

{ "Sid": "CodeStarNotificationsPowerUserAccess", "Effect": "Allow", "Action": [ "codestar-notifications:DescribeNotificationRule" ], "Resource": "*", "Condition" : { "StringLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codedeploy:*"} } }, { "Sid": "CodeStarNotificationsListAccess", "Effect": "Allow", "Action": [ "codestar-notifications:ListNotificationRules" ], "Resource": "*" }

有关更多信息,请参阅 AWS CodeStar Notifications 的身份和访问权限管理

客户管理的策略示例

本节的用户策略示例介绍如何授予各个 CodeDeploy 操作的权限。这些政策在您使用 CodeDeploy API, AWS SDK,或 AWS CLI. 您必须针对在控制台中执行的操作授予其他权限。要了解有关授予控制台权限的更多信息,请参阅使用 CodeDeploy 控制台 .

注意

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

示例:

示例 #1 允许用户执行 CodeDeploy 单个区域的运营

以下示例授予执行权限 CodeDeploy 运营 us-west-2 仅限地区:

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:*" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE:*" ] } ] }

示例 2 允许用户注册单个应用程序的修订

以下示例授予了注册应用程序修订版的权限,该版本的所有应用程序开始于 Testus-west-2 地区:

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:RegisterApplicationRevision" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE:application:Test*" ] } ] }

示例 3 允许用户创建单个部署组的部署

以下示例允许指定用户创建名为“部署组”的部署 WordPress_DepGroup 与名为 WordPress_App,名为 ThreeQuartersHealthy,以及与名称应用程序相关的任何应用程序修订 WordPress_App...所有这些资源都位于 us-west-2 地区。

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:CreateDeployment" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE:deploymentgroup:WordPress_App/WordPress_DepGroup" ] }, { "Effect" : "Allow", "Action" : [ "codedeploy:GetDeploymentConfig" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE:deploymentconfig:ThreeQuartersHealthy" ] }, { "Effect" : "Allow", "Action" : [ "codedeploy:GetApplicationRevision" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE:application:WordPress_App" ] } ] }

策略最佳实践

基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 CodeDeploy 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:

  • 开始使用 AWS 托管策略 – 要快速开始使用 CodeDeploy,请使用 AWS 托管策略,为您的员工授予他们所需的权限。这些策略已在您的账户中提供,并由 AWS 维护和更新。有关更多信息,请参阅 IAM 用户指南 中的利用 AWS 托管策略开始使用权限

  • 授予最低权限 – 创建自定义策略时,仅授予执行任务所需的许可。最开始只授予最低权限,然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息,请参阅 IAM 用户指南 中的授予最小权限

  • 为敏感操作启用 MFA – 为增强安全性,要求 IAM 用户使用多重身份验证 (MFA) 来访问敏感资源或 API 操作。有关更多信息,请参阅 IAM 用户指南 中的在 AWS 中使用多重身份验证 (MFA)

  • 使用策略条件来增强安全性 – 在切实可行的范围内,定义基于身份的策略在哪些情况下允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件,以便仅允许指定日期或时间范围内的请求,或者要求使用 SSL 或 MFA。有关更多信息,请参阅 IAM 用户指南 中的 IAM JSON 策略元素:Condition

使用 CodeDeploy 控制台

如果您使用 CodeDeploy 控制台,您必须拥有最少的权限,允许您描述其他 AWS 为您的 AWS 账户。使用 CodeDeploy 在 CodeDeploy 控制台,您必须拥有以下服务的权限:

  • Amazon EC2 Auto Scaling

  • AWS CodeDeploy

  • Amazon Elastic Compute Cloud

  • Elastic Load Balancing

  • AWS Identity and Access Management

  • Amazon Simple Storage Service

  • Amazon Simple Notification Service

  • Amazon CloudWatch

如果您创建 IAM 与最低要求权限的策略相比,控制台不能用于用户的功能 IAM 政策。确保这些用户仍可以使用 CodeDeploy 控制台,也可以将 AWSCodeDeployReadOnlyAccess 对用户的管理策略,详见 适用于 的 AWS 托管(预定义)策略CodeDeploy.

您不需要允许仅将调用呼叫的最低控制台权限 AWS CLI 或 CodeDeploy API。

允许用户查看他们自己的权限

此示例显示您可以如何创建策略,以便允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws-cn:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }