AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何使用 CodePipeline 在不同 AWS 帳戶部署成品至 Amazon S3?
我想部署成品至不同帳戶的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。我也想使用 AWS CodePipeline 搭配 Amazon S3 部署動作供應相,將目標帳戶設定為物件擁有者。
解決方法
**注意:**下列程序範例假設如下:
- 您擁有兩個帳戶:開發帳戶與生產帳戶。
- 開發帳戶的輸入儲存貯體命名為 codepipeline-input-bucket (啟用版本控制)。
- 開發帳戶的預設成品儲存貯體命名為 codepipeline-us-east-1-0123456789。
- 生產帳戶的輸出儲存貯體命名為 codepipeline-output-bucket。
- 您正在部署開發帳戶的成品至生產帳戶的 S3 儲存貯體。
- 您擔任生產帳戶所建立的跨帳戶角色來部署成品。此角色會讓生產帳戶成為物件擁有者,而非開發帳戶。若要讓生產帳戶儲存貯體擁有者能存取開發帳戶所擁有的物件,請參閱下列文章: 如何使用 CodePipeline 與固定的 ACL 在不同 AWS 帳戶部署成品至 Amazon S3?
建立 AWS KMS key,以便在開發帳戶與 CodePipeline 搭配使用
**重要事項:**您必須使用 AWS Key Management Service (KMS) 客戶受管金鑰進行跨帳戶部署。如未設定金鑰,則 CodePipeline 會利用預設加密來加密物件,目的地帳戶的角色無法將其解密。
1. 在開發帳戶開啟 AWS KMS 主控台。
2. 從導覽窗格選擇客戶受管金鑰。
3. 選擇建立金鑰。
4. 對於金鑰類型,選擇對稱金鑰。
5. 展開進階選項。
6. 對於金鑰材料來源,選擇 KMS。然後選擇下一步。
7. 對於別名,輸入金鑰別名。例如:s3deploykey。
8. 選擇下一步。定義金鑰管理權限頁面隨即開啟。
9. 在 Key administrators (金鑰管理員) 區段,選取 AWS Identity and Access Management (IAM) 使用者或角色作為金鑰管理員。
10.選擇 Next (下一步)。定義金鑰使用權限頁面隨即開啟。
11. 在其他 AWS 帳戶區段,選擇新增其他 AWS 帳戶。
12. 在出現的文字方塊,新增生產帳戶的帳戶 ID。然後選擇下一步。
注意:您也可在此帳戶區段選取現有服務角色。如您選取現有服務角色,請略過更新開發帳戶 KMS 使用政策區段的步驟。
13. 檢閱金鑰政策。然後,選擇完成。
在開發帳戶建立 CodePipeline
1. 開啟 CodePipeline 主控台。然後,選擇建立管道。
2. 對於管道名稱,輸入管道名稱。例如:crossaccountdeploy。
注意:****角色名稱文字方塊會自動填入服務角色名稱 AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy。您也可選擇具 KMS 金鑰存取權的其他現有服務角色。
3. 展開進階設定區段。
4. 對於成品存放區,選取預設位置。
注意:如果您的使用案例需要,您可選取自訂位置。
5. 對於加密金鑰,選取客戶受管金鑰。
6. 對於 KMS 客戶受管金鑰,從清單選取金鑰別名 (在此範例為 s3deploykey)。然後選擇下一步。Add source stage (新增來源階段) 頁面隨即開啟。
7.對於 Source provider (來源供應商),選擇 Amazon S3。
8. 對於儲存貯體,輸入開發輸入 S3 儲存貯體的名稱。例如:codepipeline-input-bucket。
**重要事項:**輸入儲存貯體必須啟用版本控制才能與 CodePipeline 搭配使用。
9. 對於 S3 物件金鑰,輸入 sample-website.zip。
重要事項:若要使用 AWS 網站範例而非您自己的網站,請參閱教學課程: 建立使用 Amazon S3 作為部署供應商的管道。然後,在 1 的先決條件搜尋「靜態網站範例」: 部署靜態網站檔案至 Amazon S3 區段。
10. 對於變更偵測選項,請選擇 Amazon CloudWatch Events (建議)。然後選擇下一步。
11. 在新增建置階段頁面,選擇略過建置階段。然後,選擇略過。
12. 在新增部署階段頁面,對於部署供應商,選擇 Amazon S3。
13. 對於區域,選擇生產輸出 S3 儲存貯體所在的 AWS 區域。例如: 美國東部 (維吉尼亞北部)。
**重要事項:**如果生產輸出儲存貯體的區域與管道的區域不同,則您還必須驗證以下內容:
- 您正在使用具多個複本的 AWS KMS 多區域金鑰。
- 您的管道在兩個區域都具成品存放區。
14. 在儲存貯體,輸入生產輸出 S3 儲存貯體名稱。例如:codepipeline-output-bucket。
15. 選取在部署之前解壓縮檔案核取方塊。
注意:如需要,請輸入部署路徑的路徑。
16. 選擇下一步。
17. 選擇建立管道。管道會執行,但來源階段失敗。會出現下列錯誤訊息: 「具 'sample-website.zip' 金鑰的物件不存在。」
本文的上傳網站範例至輸入儲存貯體區段說明如何解決此錯誤。
更新開發帳戶的 KMS 使用政策
**重要事項:**如您正在使用現有 CodePipeline 服務角色,請略過本區段。
1. 在開發帳戶開啟 AWS KMS 主控台。
2. 選取金鑰別名 (在此範例為 s3deploykey)。
3. 在金鑰使用者 區段,選擇新增。
4. 在搜尋方塊輸入服務角色 AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy。
5. 選擇新增。
在生產帳戶設定跨帳戶角色
為角色建立 IAM 政策,以便授予 Amazon S3 權限至生產輸出 S3 儲存貯體
1. 在生產帳戶開啟 IAM 主控台。
2. 在瀏覽窗格選擇政策。然後,選擇建立政策。
3. 選擇 JSON 索引標籤。然後,在 JSON 編輯器輸入以下政策:
**重要事項:**將生產輸出 S3 儲存貯體名稱取代 codepipeline-output-bucket。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Put*" ], "Resource": [ "arn:aws:s3:::codepipeline-output-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-output-bucket" ] } ] }
4. 選擇檢閱政策。
5. 對於名稱,輸入政策名稱。例如:outputbucketdeployaccess。
6. 選擇建立政策。
為角色建立 IAM 政策,以便授予所需 KMS 權限
1. 在 IAM 主控台,選擇建立政策。
2. 選擇 JSON 索引標籤。然後,在 JSON 編輯器輸入以下政策:
**注意:**取待您所建立的 KMS 金鑰的 ARN。將開發帳戶的成品儲存貯體名稱取代 codepipeline-us-east-1-0123456789。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:<dev-account-id>:key/<key id>" ] }, { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-1-0123456789/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-1-0123456789" ] } ] }
3. 選擇檢閱政策。
4. 對於名稱,輸入政策名稱。例如:devkmss3access。
5. 選擇建立政策。
建立跨帳戶角色,以便開發帳戶可擔任該角色部署成品
1. 在生產帳戶開啟 IAM 主控台。
2. 在瀏覽窗格選擇角色。然後,選擇建立角色。
3. 選擇其他 AWS 帳戶。
4. 對於帳戶 ID,輸入開發帳戶 AWS 帳戶 ID。
5. 選擇下一步: 許可。
6. 從政策清單選取 outputbucketdeployaccess 與 devkmss3access。
7. 選擇下一步: 標籤。
8. (選用) 新增標籤,然後選擇下一步: 檢閱。
9. 對於角色名稱,輸入 prods3role。
10. 選擇建立角色。
11. 從角色清單選擇 prods3role。
12. 選擇信任關係。然後,選擇編輯信任關係。
13. 在政策文件編輯器,輸入下列政策:
**重要事項:**將開發帳戶的 AWS 帳戶 ID 取代 dev-account-id。將管道的服務角色名稱取代 AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<dev-account-id>:role/service-role/AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
14. 選擇更新信任政策。
針對開發帳戶 CodePipeline 成品儲存貯體更新其儲存貯體政策
1. 在開發帳戶開啟 Amazon S3 主控台。
2. 在儲存貯體名稱清單,選擇開發帳戶的成品儲存貯體名稱 (在此範例為 codepipeline-us-east-1-0123456789)。
3. 選擇權限。選擇儲存貯體政策。
4. 在文字編輯器,更新現有政策並包含下列政策陳述式:
**重要事項:**若要與適當 JSON 格式保持一致,請在現有陳述式之後加上逗號。將生產帳戶的 AWS 帳戶 ID 取代 prod-account-id。將成品儲存貯體名稱取代 codepipeline-us-east-1-0123456789。
{ "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-1-0123456789/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-1-0123456789" }
5. 選擇儲存。
連接政策至開發帳戶的 CodePipeline 服務角色,以允許其擔任您所建立的跨帳戶角色
1. 在開發帳戶開啟 IAM 主控台。
2. 在瀏覽窗格選擇政策。然後,選擇建立政策。
3. 選擇 JSON 索引標籤。然後,在 JSON 編輯器輸入以下政策:
**重要事項:**將生產帳戶的 AWS 帳戶 ID 取代 prod-account-id。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::<prod-account-id>:role/prods3role" ] } }
4. 選擇檢閱政策。
5. 對於名稱,輸入 assumeprods3role。
6. 選擇建立政策。
7. 在瀏覽窗格選擇角色。然後,選擇管道的服務角色名稱 (在此範例為 AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy)。
8. 選擇連接政策。然後,選擇 assumeprods3role。
9. 選擇連接政策。
更新管道以便在開發帳戶中使用跨帳戶角色
**注意:**如您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您採用的是最新版本 AWS CLI。
1. 執行下列 AWS CLI 命令,擷取管道定義做為名為 codepipeline.json 的檔案:
**重要事項:**將管道名稱取代 crossaccountdeploy。
aws codepipeline get-pipeline --name crossaccountdeploy > codepipeline.json
2. 新增跨帳戶 IAM 角色 ARN (roleArn) 至 codepipeline.json 檔案的部署動作區段。如需詳細資訊,請參閱 CodePipeline 使用者指南的 CodePipeline 管道結構參考。
跨帳戶 IAM roleArn 範例
"roleArn": "arn:aws:iam::your-prod-account id:role/prods3role",
部署動作範例,其中包含跨帳戶 IAM 角色 ARN
**重要事項:**將生產帳戶的 AWS 帳戶 ID 取代 prod-account-id。
{ "name": "Deploy", "actions": [ { "name": "Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "S3", "version": "1" }, "runOrder": 1, "configuration": { "BucketName": "codepipeline-output-bucket", "Extract": "true" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "roleArn": "arn:aws:iam::<prod-account-id>:role/prods3role", "region": "us-east-1", "namespace": "DeployVariables" } ] }
3. 移除 codepipeline.json 檔案結尾的中繼資料區段。
**重要事項:**確保一併移除中繼資料區段之前的逗號。
中繼資料區段範例
"metadata": { "pipelineArn": "arn:aws:codepipeline:us-east-1:<dev-account-id>:crossaccountdeploy", "created": 1587527378.629, "updated": 1587534327.983 }
4. 執行下列命令更新管道:
aws codepipeline update-pipeline --cli-input-json file://codepipeline.json
上傳網站範例至輸入儲存貯體
1. 在開發帳戶開啟 Amazon S3 主控台。
2. 在儲存貯體名稱清單,選擇開發輸入 S3 儲存貯體。例如:codepipeline-input-bucket。
3. 選擇上傳。然後,選擇新增文件。
4. 選取之前下載的 sample-website.zip 檔案。
5. 選擇上傳並執行管道。當執行管道時,會發生下列情況:
- 來源動作會從開發輸入 S3 儲存貯體 (codepipeline-input-bucket) 選取 sample-website.zip。然後,來源動作會將 zip 檔案做為來源成品放在開發帳戶的成品儲存貯體內 (codepipeline-us-east-1-0123456789)。
- 在部署動作,CodePipeline 服務角色 (AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy) 會在生產帳戶擔任跨帳戶角色 (prods3role)。
- CodePipeline 會使用跨帳戶角色 (prods3role) 存取開發帳戶的 KMS 金鑰與成品儲存貯體。然後,CodePipeline 會部署擷取檔案至生產帳戶的生產輸出 S3 儲存貯體 (codepipeline-output-bucket)。
**注意:**生產帳戶是生產輸出 S3 儲存貯體 (codepipeline-output-bucket) 的擷取物件擁有者。
- 語言
- 中文 (繁體)

相關內容
- 已提問 5 個月前
- 已提問 2 年前