AWS CodeDeploy
用户指南 (API 版本 2014-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

本指南中的过程支持新的控制台设计。如果您选择使用较旧版本的控制台,可以在本指南中找到许多仍然适用的概念和基本过程。要访问新控制台中的帮助,请选择信息图标。

为 CodeDeploy 使用基于身份的策略(IAM 策略)

本主题提供基于身份的策略的示例,这些示例展示账户管理员如何将权限策略附加到 IAM 身份(即用户、组和角色),从而授予对 CodeDeploy 资源执行操作的权限。有关必须附加到 IAM 用户才能使用 CodeDeploy 的策略的信息,请参阅步骤 1:预置 IAM 用户

重要

我们建议您首先阅读以下介绍性主题,这些主题说明了可用于管理 CodeDeploy 资源访问的基本概念和选项。有关更多信息,请参阅管理您的 CodeDeploy 资源的访问权限概述

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

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

使用 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 托管策略,如适用于 CodeDeploy 的 AWS 托管(预定义)策略所述。

对于只需要调用 AWS CLI 或 CodeDeploy API 的用户,您无需为其提供最低控制台权限。

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

AWS 通过提供由 AWS 创建和管理的独立 IAM 策略来解决许多常用案例。这些 AWS 托管策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作。有关更多信息,请参阅 IAM 用户指南 中的 AWS 托管策略

以下 AWS 托管策略(您可以将它们挂载到自己账户中的用户)是特定于 CodeDeploy 的:

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

    注意

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

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

     

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

     

  • AWSCodeDeployRole – 允许 CodeDeploy 通过 Amazon EC2 实例的 Amazon EC2 标签或 Amazon EC2 Auto Scaling 组名称来识别这些实例,通过本地实例的标签来识别本地实例,以及将应用程序修订相应地部署到这些实例。提供所需权限向 Amazon SNS 主题发布通知和从 CloudWatch 检索关于警报的信息。

     

  • AWSCodeDeployRoleForLambda – 授予 CodeDeploy 权限以访问 AWS Lambda 和部署所需的任何其他资源。

     

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

     

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

    • 在 AppSpec file的 hooks 部分中,只能使用以 CodeDeployHook_ 开头的 Lambda 函数。有关更多信息,请参阅 用于 部署的 AppSpec 的“hooks”部分

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

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

  • IAM instance profile: An IAM role that you attach to your Amazon EC2 instances. This profile includes the permissions required to access the Amazon S3 buckets or GitHub repositories where the applications that will be deployed by CodeDeploy are stored. For more information, see 步骤 4:为 Amazon EC2 实例创建 IAM 实例配置文件.

  • Service role: An IAM role that grants permissions to an AWS service so it can access AWS resources. The policies you attach to the service role determine which AWS resources the service can access and the actions it can perform with those resources. For CodeDeploy, a service role is used for the following:

    • To read either the tags applied to the instances or the Amazon EC2 Auto Scaling group names associated with the instances. This enables CodeDeploy to identify instances to which it can deploy applications.

    • To perform operations on instances, Auto Scaling groups, and Elastic Load Balancing load balancers.

    • To publish information to Amazon SNS topics so that notifications can be sent when specified deployment or instance events occur.

    • To retrieve information about CloudWatch alarms in order to set up alarm monitoring for deployments.

    For more information, see 步骤 3:为 CodeDeploy 创建服务角色.

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

客户托管策略示例

本节的用户策略示例介绍如何授予各 CodeDeploy 操作的权限。当您使用 CodeDeploy API、AWS 开发工具包或 AWS CLI 时,可以使用这些策略。当您使用控制台时,您需要授予特定于控制台的其他权限,使用 CodeDeploy 控制台所需要的权限中对此进行了讨论。

您可以使用列出的以下示例 IAM 策略来限制 IAM 用户和角色对 CodeDeploy 的访问。

注意

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

示例

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

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

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

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

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

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:RegisterApplicationRevision" ], "Resource" : [ "arn:aws-cn:codedeploy:us-west-2:80398EXAMPLE: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-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" ] } ] }