

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

# 在其他 AWS 账户中部署应用程序
<a name="deployments-cross-account"></a>

Organizations 通常有多个用于不同目的的 AWS 帐户（例如，一个用于系统管理任务，另一个用于开发、测试和生产任务，或者一个与开发和测试环境相关联，另一个与生产环境关联）。

尽管您可能在不同的账户中执行相关工作，但 CodeDeploy 部署组及其部署到的 Amazon EC2 实例与其创建时使用的账户严格关联。例如，您无法将在一个账户中启动的实例添加到另一个账户中的部署组。

假设你有两个 AWS 账户：你的开发账户和你的生产账户。您主要使用开发账户进行工作，但是希望能够在生产账户中启动部署而无需完整的一组凭证，或者不希望注销开发账户并登录生产账户来进行工作。

完成以下跨账户配置步骤之后，您可以启动属于您组织的另一个账户下的部署，而无需另一个账户的一组完整权限。在此操作过程中，您需要使用 AWS Security Token Service （AWS STS）提供的功能，该功能可授予您对该账户的临时访问权限。

## 步骤 1：在任一账户中创建 S3 存储桶
<a name="deployments-cross-account-1-create-s3-bucket"></a>

在开发账户或生产账户中：
+ 如果您还未创建，则创建将在其中存储生产账户的应用程序修订的 Amazon S3 存储桶。有关信息，请参阅[在 Amazon S3 中创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)。您甚至可以为两个账户使用相同的存储桶和应用程序修订，将您在开发账户中测试和验证的相同文件部署到您的生产环境。

## 步骤 2：将 Amazon S3 存储桶权限授予生产账户的 IAM 实例配置文件
<a name="deployments-cross-account-2-grant-bucket-permissions"></a>

如果您在步骤 1 中创建的 Amazon S3 存储桶位于您的生产账户中，则不需要此步骤。稍后您将承担的角色具有对此存储桶的访问权限，因为该存储桶也位于生产账户中。

如果您在开发账户中创建了 Amazon S3 存储桶，则执行以下操作：
+ 在生产账户中，创建 IAM 实例配置文件。有关信息，请参阅[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)。
**注意**  
记录此 IAM 实例配置文件的 ARN。您需要将它添加到接下来创建的跨存储桶策略中。
+ 在开发账户中，将您在开发账户中创建的 Amazon S3 存储桶的访问权限授予刚刚在生产账户中创建的 IAM 实例配置文件。有关信息，请参阅[示例 2：存储桶拥有者授予跨账户存储桶权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)。

  完成授予跨账户存储桶权限的过程时，请注意以下内容：
  + 在示例演练中，账户 A 表示您的开发账户，账户 B 表示您的生产账户。
  + 当您[执行账户 A（开发账户）任务](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html#access-policies-walkthrough-cross-account-permissions-acctA-tasks)时，修改以下存储桶策略以授予跨账户权限，而不是使用演练中提供的示例策略。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "Cross-account permissions",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::111122223333:role/role-name"
                },
                "Action": [
                    "s3:Get*",
                    "s3:List*"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket-name/*"
                ]
            }
        ]
    }
    ```

------

    *account-id*表示您刚刚在其中创建 IAM 实例配置文件的生产账户的账号。

    *role-name*代表您刚刚创建的 IAM 实例配置文件的名称。

    *bucket-name*表示您在步骤 1 中创建的存储桶的名称。请确保在存储桶名称之后包括 `/*`，以提供对存储桶中各个文件的访问权限。

## 步骤 3：在生产账户中创建资源和跨账户角色
<a name="deployments-cross-account-3-create-resources-and-role"></a>

在生产账户中：
+ 按照本指南中的说明创建您的 CodeDeploy 资源（应用程序、部署组、部署配置、Amazon EC2 实例、Amazon EC2 实例配置文件、服务角色等）。
+ 创建一个额外的角色，即跨账户 IAM 角色，您的开发账户中的用户可以代入该角色来执行此生产账户中的 CodeDeploy 操作。

  使用[演练：使用 IAM 角色委派跨 AWS 账户访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/walkthru_cross-account-with-roles.html)作为指南，帮助您创建跨账户角色。与其将演练中的示例权限添加到策略文档中，不如将 AWS 提供的以下两个策略附加到该角色：
  + `AmazonS3FullAccess`：只有当 S3 存储桶位于开发账户中时才需要。提供对开发账户（修订存储在其中）中的 Amazon S3 服务和资源具有完整访问权限的已代入生产账户角色。
  + `AWSCodeDeployDeployerAccess`：允许用户注册和部署修订。

  如果要创建和管理部署组而不是启动部署，请添加 `AWSCodeDeployFullAccess` 策略而不是 `AWSCodeDeployDeployerAccess` 策略。有关使用 IAM 托管策略授予 CodeDeploy 任务权限的更多信息，请参阅[AWS 的托管（预定义）策略 CodeDeploy](managed-policies.md)。

  如果您希望在使用此跨账户角色时在其他 AWS 服务中执行任务，可以附加其他策略。

**重要**  
在您创建跨账户 IAM 角色时，请记录详细信息，您需要这些详细信息来获取对生产账户的访问权限。  
要使用切换角色，您需要提供以下任一信息： AWS 管理控制台   
用于通过所代入角色的凭证来访问生产账户的 URL。您可以在 **Review** 页面上找到该 URL，该页面在跨账户角色创建过程结束时显示。
跨账户角色的名称以及账户 ID 编号或别名。
要使用切换角色，您需要提供以下信息： AWS CLI   
您将代入的跨账户角色的 ARN。

## 步骤 4：将应用程序修订上传到 Amazon S3 存储桶
<a name="deployments-cross-account-4-upload-application-revision"></a>

在您创建了 Amazon S3 存储桶的账户中：
+ 将您的应用程序修订上传到 Amazon S3 存储桶。有关信息，请参阅[将修订推送 CodeDeploy 到 Amazon S3（仅限 EC2/本地部署）](application-revisions-push.md)。

## 步骤 5：代入跨账户角色和部署应用程序
<a name="deployments-cross-account-5-assume-role-and-deploy"></a>

在开发账户中，您可以使用 AWS CLI 或代 AWS 管理控制台 入跨账户角色并在生产账户中启动部署。

有关如何使用切换角色和启动部署的说明，请参阅[切换到角色 (AWS 管理控制台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) 和[创建 EC2/本地计算平台部署（控制台）](deployments-create-console.md)。 AWS 管理控制台 

有关如何使用担任跨账户角色和启动部署的说明，请参阅[切换到 IAM 角色 (AWS Command Line Interface)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) 和[创建 EC2/本地计算平台部署（CLI）](deployments-create-cli.md)。 AWS CLI 

[有关通过担任角色的更多信息 AWS STS，请参阅[《AWS Security Token Service 用户指南》和《](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)命令参[考》[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)中的 assume-](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) role。AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/)

**相关主题：**
+ [CodeDeploy: 从开发账户部署到生产账户](https://aws.amazon.com/blogs/devops/aws-codedeploy-deploying-from-a-development-account-to-a-production-account/)