

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在不同的 AWS 帳戶中部署應用程式
<a name="deployments-cross-account"></a>

組織通常有多個用於不同用途 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* 表示您在步驟一中建立的儲存貯體名稱。請確認在您的儲存貯體名稱後含有的 `/*`，提供對儲存貯體內每個文件的存取權限。

## 步驟 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 用於啟動生產帳戶與假設角色認證。您將在 **檢視** 頁面上找到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 管理主控台 切換角色和啟動部署的指示，請參閱[切換到角色 (AWS 管理主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) 和 [建立 EC2/現場部署運算平台部署 （主控台）](deployments-create-console.md)。

如需如何使用 AWS CLI 擔任跨帳戶角色並啟動部署的指示，請參閱[切換到 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 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) 和《 [AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/)》中的 [assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html)。

**相關主題：**
+ [CodeDeploy：從開發帳戶部署到生產帳戶](https://aws.amazon.com/blogs/devops/aws-codedeploy-deploying-from-a-development-account-to-a-production-account/)