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

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

Amazon CodeDeploy 基于身份的策略示例

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

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

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

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

  • 部署。

  • 部署配置。

  • 实例和本地实例。

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

资源类型

Capabilities

所有

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

应用程序

部署配置

部署组

创建资源

Delete resources

部署

创建部署

停止部署

应用程序修订

注册应用程序修订

应用程序

部署组

更新资源

本地实例

向实例中添加标签

从实例中删除标签

注册实例

取消注册实例

下面的示例演示一个权限策略,该策略允许用户删除与 us-west-2 区域中名为 WordPress_DepGroup 的应用程序关联的名为 WordPress_App 的部署组。

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

AmazonCodeDeploy 托管(预定义)策略

Amazon通过提供由Amazon创建和管理的独立 IAM 策略来满足许多常用案例的要求。这些 Amazon 托管策略授予常用案例的必要权限,这样您不需要调查需要哪些权限。有关更多信息,请参阅 IAM 用户指南.中的 Amazon 托管式策略

的列表AmazonCodeDeploy 的托管策略

以下Amazon托管策略(您可以将它们附加到您账户中的用户)特定于 CodeDeploy:

  • AWSCodeDeployFullAccess:授予对 CodeDeploy 的完全访问权限

    注意

    AWSCODEDeploy FullAccess 不提供对部署您的应用程序所需的其他服务中的操作的权限(如 Amazon EC2 和 Amazon S3),仅提供对 CodeDeploy 特定的操作的权限。

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

     

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

     

  • AWSCodeDeployRole:允许 CodeDeploy:

    • 阅读您实例上的标签或通过 Amazon EC2 Auto Scaling 组名称来识别您的 Amazon EC2 实例。

    • 读取、创建、更新和删除 Amazon EC2 Auto Scaling 组、生命周期挂钩、扩展策略和暖池功能

    • 向 Amazon SNS 主题发布信息

    • 检索有关 Amazon CloudWatch 警报的信息

    • 读取和更新 Elastic Load Balancing 服务中的资源

    该策略包含以下代码:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction", "autoscaling:DeleteLifecycleHook", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeLifecycleHooks", "autoscaling:PutLifecycleHook", "autoscaling:RecordLifecycleActionHeartbeat", "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:EnableMetricsCollection", "autoscaling:DescribePolicies", "autoscaling:DescribeScheduledActions", "autoscaling:DescribeNotificationConfigurations", "autoscaling:SuspendProcesses", "autoscaling:ResumeProcesses", "autoscaling:AttachLoadBalancers", "autoscaling:AttachLoadBalancerTargetGroups", "autoscaling:PutScalingPolicy", "autoscaling:PutScheduledUpdateGroupAction", "autoscaling:PutNotificationConfiguration", "autoscaling:DescribeScalingActivities", "autoscaling:DeleteAutoScalingGroup", "autoscaling:PutWarmPool", "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:TerminateInstances", "tag:GetResources", "sns:Publish", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:RegisterTargets", "elasticloadbalancing:DeregisterTargets" ], "Resource": "*" } ] }

     

  • AWSCodeDeployRoleForLambda:授予 CodeDeploy 访问的权限Amazon Lambda以及部署所需的任何其他资源。

     

  • AWSCodeDeployRoleForECS:授予 CodeDeploy 权限,以访问 Amazon ECS 和部署所需的任何其他资源。

     

  • AWSCodeDeployRoleForECSLimited:授予 CodeDeploy 权限以访问 Amazon ECS 和部署所需的任何其他资源,以下情况除外:

    • hooks在 AppSpec 文件的部分中,只有名称以开头的 Lambda 函数CodeDeployHook_可以使用。有关更多信息,请参阅Amazon ECS 部署的 AppSpec 的 “hooks” 部分

    • S3 存储桶访问权限仅限于具有注册标记 UseWithCodeDeploy 且值为 true 的 S3 存储桶。有关更多信息,请参阅 。对象标签.

部署过程某些方面的权限已授给两个代表 CodeDeploy 行事的其他角色类型,而不是 IAM 用户:

  • IAM 实例配置文件:您附加到 Amazon EC2 实例的 IAM 角色。此配置文件包括访问用于存储应用程序的 Amazon S3 存储桶或 GitHub 存储库所需的权限。有关更多信息,请参阅第 4 步:为您的 Amazon EC2 实例创建 IAM 实例配置文件

  • 服务角色:向向授予权限的 IAM 角色Amazon服务所以它可以访问Amazon资源的费用。您附加到服务角色的策略决定了哪些策略Amazon服务可以访问的资源以及它可以使用这些资源执行的操作。对于 CodeDeploy,服务角色用于以下内容:

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

    • 要对实例执行操作,请使用 Amazon EC2 Auto Scaling 组和 Elastic Load Balancing 器负载均衡器。

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

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

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

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

CodeDeploy 将更新到Amazon托管策略

查看有关更新的详细信息AmazonCodeDeploy 的托管策略(从该服务开始跟踪这些更改起)。要获得有关此页面更改的自动提示,请订阅 CodeDeploy 上的 RSS 源。文档历史记录.

更改 描述 日期

AWSCodeDeployRole托管策略 — 对现有策略的更新

添加了autoscaling:PutWarmPool支持的行动向 Amazon EC2 Auto Scaling 组添加温池适用于蓝/绿部署。

删除了不必要的重复操作。

2021 年 5 月 18 日

CodeDeploy 开启跟踪更改

CodeDeploy 为其开启了跟踪更改Amazon托管策略。

2021 年 5 月 18 日

CodeDeploy 托管策略和通知

CodeDeploy 支持通知,以使用户了解部署的重要更改。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 通知的身份和访问管理.

客户托管的策略示例

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

注意

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

示例

示例 1:允许用户在单个区域中执行 CodeDeploy 操作

以下示例授予在中执行 CodeDeploy 操作的权限。us-west-2仅限地区:

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

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

以下示例授予为 us-west-2 区域中所有以 Test 开头的应用程序注册应用程序修订的权限:

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

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

以下示例允许指定用户为与名为 WordPress_App 的应用程序关联的名为 WordPress_DepGroup 的部署组、名为 ThreeQuartersHealthy 的自定义部署配置以及与名为 WordPress_App 的应用程序关联的任何应用程序修订创建部署。所有这些资源都位于 us-west-2 区域中。

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

策略最佳实践

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

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

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

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

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

使用 CodeDeploy 控制台

如果您使用 CodeDeploy 控制台,则必须具有一组最小权限,以允许您描述其他权限。Amazon您的资源Amazonaccount. 要在 CodeDeploy 控制台中使用 CodeDeploy,您必须拥有来自以下服务的权限:

  • Amazon EC2 Auto Scaling

  • Amazon CodeDeploy

  • Amazon Elastic Compute Cloud

  • Elastic Load Balancing

  • Amazon Identity and Access Management

  • Amazon Simple Storage Service

  • Amazon Simple Notification Service

  • Amazon CloudWatch

如果创建比必需的最低权限更为严格的 IAM 策略,对于附加了该 IAM 策略的用户,控制台将无法按预期正常运行。为确保这些用户仍可使用 CodeDeploy 控制台,还请将AWSCodeDeployReadOnlyAccess向用户提供托管策略,如中所述AmazonCodeDeploy 托管(预定义)策略.

对于仅对Amazon CLI或者 CodeDeploy API。

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

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws: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": "*" } ] }