將一個AWS帳戶中的AWS CodeCommit 儲存庫與另一個帳戶中的 SageMaker Studio 建立關聯 - AWS 方案指引

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

將一個AWS帳戶中的AWS CodeCommit 儲存庫與另一個帳戶中的 SageMaker Studio 建立關聯

由 Laurens van der Maas (AWS) 和 Aubrey Oosthuizen (AWS) 建立

環境:生產

技術:機器學習和 AI DevOps;安全、身分、合規; CloudNative

AWS 服務:AWS CodeCommit;Amazon SageMaker;AWSIdentity and Access Management

Summary

此模式提供如何將一個AWS帳戶 (帳戶 A) 中的AWS CodeCommit 儲存庫與另一個AWS帳戶 (帳戶 B) 中的 Amazon SageMaker Studio 建立關聯的說明和程式碼。若要設定關聯,您必須在帳戶 A 中建立 AWS Identity and Access Management (IAM) 政策和角色,並在帳戶 B 中建立IAM內嵌政策。然後,您可以使用 Shell 指令碼,將 CodeCommit 儲存庫從帳戶 A 複製到帳戶 B 中的 SageMaker Studio。

先決條件和限制

先決條件

  • 兩個AWS帳戶 ,一個包含 CodeCommit 儲存庫,另一個包含具有使用者的 SageMaker 網域

  • 佈建的SageMaker 網域和使用者 ,透過虛擬私有網路 (AWSSTS) 端點具有網際網路存取或存取 CodeCommit 和 AWS 安全權杖服務 (VPC)

  • 對 的基本了解 IAM

  • SageMaker Studio 的基本了解

  • Git 和 的基本了解 CodeCommit

限制

此模式僅適用於 SageMaker Studio,不適用於 Amazon RStudio上的 SageMaker。

架構

技術堆疊

  • Amazon SageMaker

  • Amazon SageMaker Studio

  • AWS CodeCommit

  • AWS Identity and Access Management (IAM)

  • Git

目標架構

下圖顯示將儲存 CodeCommit 庫從帳戶 A 與帳戶 B 中的 SageMaker Studio 建立關聯的架構。

跨帳戶關聯的架構圖

該圖顯示以下工作流程:

  1. 使用者透過MyCrossAccountRepositoryContributorRole角色在帳戶 A 中擔任sts:AssumeRole角色,同時使用帳戶 B 中 SageMaker Studio 中的 SageMaker 執行角色。擔任的角色包含複製並與指定儲存庫互動的 CodeCommit 許可。

  2. 使用者從 SageMaker Studio 中的系統終端機執行 Git 命令。

自動化和擴展

此模式由手動步驟組成,這些步驟可以使用AWS雲端開發套件 (AWS CDK)AWS CloudFormation、 或 Terraform 自動執行。

工具

AWS 工具

  • Amazon SageMaker 是一項受管機器學習 (ML) 服務,可協助您建置和訓練 ML 模型,然後將模型部署到生產就緒的託管環境中。

  • Amazon SageMaker Studio 是適用於機器學習的 Web 型整合式開發環境 (IDE),可讓您建置、訓練、偵錯、部署和監控機器學習模型。

  • AWS CodeCommit 是一種版本控制服務,可協助您私有儲存和管理 Git 儲存庫,而無需管理您自己的來源控制系統。

  • AWS Identity and Access Management (IAM) 可透過控制誰經過身分驗證並獲授權使用資源,協助您安全地管理對AWS資源的存取。

其他工具

  • Git 是一種分散式版本控制系統,用於追蹤軟體開發期間原始程式碼的變更。

史詩

任務描述所需的技能

在帳戶 A 中建立儲存庫存取IAM的政策。

  1. 登入 AWS Management Console 並開啟IAM主控台

  2. 在導覽窗格中,選擇 Policies (政策),然後選擇 Create policy (建立政策)

  3. 選擇 JSON 索引標籤。

  4. 在此模式的額外資訊區段中,從範例IAM政策複製政策陳述式,然後將陳述式貼到JSON編輯器中。請務必取代政策中的所有預留位置值。

  5. 選擇下一步:標籤 ,然後選擇下一步:檢閱

  6. 針對 Name (名稱),輸入政策的名稱。注意:在此模式中,IAM政策稱為 CrossAccountAccessForMySharedDemoRepo,但您可以選擇任何您偏好的政策名稱。

  7. 選擇 建立政策

秘訣:最佳實務是將IAM政策的範圍限制在使用案例所需的最低許可。

AWS DevOps

在帳戶 A 中建立儲存庫存取IAM的角色。

  1. IAM主控台的導覽窗格中,選擇角色 ,然後選擇建立角色

  2. 對於受信任實體類型 ,選取AWS帳戶

  3. AWS帳戶區段中,選取另一個AWS帳戶

  4. 針對帳戶 ID ,輸入帳戶 B 的帳戶 ID。

  5. 新增許可頁面上,搜尋並選擇您先前建立CrossAccountAccessForMySharedDemoRepo的政策。

  6. 選擇 Next (下一步)

  7. Role name (角色名稱) 中,輸入名稱。注意:在此模式中,IAM角色名稱稱為 MyCrossAccountRepositoryContributorRole,但您可以選擇任何您偏好的角色名稱。

  8. 選擇建立角色 ,然後複製新角色的 Amazon Resource Name (ARN)。

AWS DevOps
任務描述所需的技能

將內嵌政策連接至帳戶 B 中連接至 SageMaker 網域使用者的執行角色。

  1. IAM主控台的導覽窗格中,選擇角色

  2. 在帳戶 B 中搜尋並選擇連接至 SageMaker 網域使用者的執行角色。

  3. 選擇新增許可 ,然後選擇建立內嵌政策

  4. 選擇 JSON 索引標籤。

  5. 複製下列政策陳述式,然後將其貼到JSON編輯器中。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<Account_A_ID>:role/<Account_A_Role_Name>" } ] }
  6. 以帳戶 A 的帳戶 ID 取代<Account_A_ID><Account_A_Role_Name>以IAM您先前建立的角色名稱取代 。

  7. 選擇檢閱政策

  8. 針對名稱 ,輸入內嵌政策的名稱。

  9. 選擇 建立政策

AWS DevOps
任務描述所需的技能

在帳戶 B 的 SageMaker Studio 中建立 Shell 指令碼。

  1. SageMaker 主控台的導覽窗格中,選擇 Studio

  2. 選取您的使用者設定檔,然後選擇 Open Studio

  3. 首頁區段中,選擇開啟啟動器

  4. 公用程式和檔案區段中,選擇文字檔案

  5. 在此模式的額外資訊區段中,從範例 SageMaker Shell 指令碼複製指令碼,然後將陳述式貼到新檔案中。請務必取代指令碼中的所有預留位置值。

  6. 在新檔案的 untitled.txt 索引標籤上按一下滑鼠右鍵,然後選擇重新命名文字 。對於新名稱 ,輸入 cross_account_git_clone.sh ,然後選擇重新命名

AWS DevOps

從系統終端機叫用 Shell 指令碼。

  1. SageMaker 主控台首頁區段中,選擇開啟啟動器

  2. 公用程式和檔案區段中,選擇系統終端機

  3. 在終端機中,執行下列命令:

    chmod u+x ./cross_account_git_clone.sh && ./cross_account_git_clone.sh

您已複製 SageMaker Studio 跨帳戶中的 CodeCommit 儲存庫。您現在可以從系統終端機執行所有 Git 命令。

AWS DevOps

其他資訊

範例IAM政策

如果您使用此範例政策,請執行下列動作:

  • <CodeCommit_Repository_Region> 將 取代為儲存庫AWS的區域。

  • <Account_A_ID> 以帳戶 A 的帳戶 ID 取代 。

  • <CodeCommit_Repository_Name> 將 取代為帳戶 A 中的 CodeCommit 儲存庫名稱。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:BatchGet*", "codecommit:Create*", "codecommit:DeleteBranch", "codecommit:Get*", "codecommit:List*", "codecommit:Describe*", "codecommit:Put*", "codecommit:Post*", "codecommit:Merge*", "codecommit:Test*", "codecommit:Update*", "codecommit:GitPull", "codecommit:GitPush" ], "Resource": [ "arn:aws:codecommit:<CodeCommit_Repository_Region>:<Account_A_ID>:<CodeCommit_Repository_Name>" ] } ] }

範例 SageMaker shell 指令碼

如果您使用此範例指令碼,請執行下列動作:

  • <Account_A_ID>以帳戶 A 的帳戶 ID 取代 。

  • <Account_A_Role_Name>以IAM您先前建立的角色名稱取代 。

  • <CodeCommit_Repository_Region>將 取代為儲存庫AWS的區域。

  • <CodeCommit_Repository_Name>將 取代為帳戶 A 中的 CodeCommit 儲存庫名稱。

#!/usr/bin/env bash #Launch from system terminal pip install --quiet git-remote-codecommit mkdir -p ~/.aws touch ~/.aws/config echo "[profile CrossAccountAccessProfile] region = <CodeCommit_Repository_Region> credential_source=EcsContainer role_arn = arn:aws:iam::<Account_A_ID>:role/<Account_A_Role_Name> output = json" > ~/.aws/config echo '[credential "https://git-codecommit.<CodeCommit_Repository_Region>.amazonaws.com"] helper = !aws codecommit credential-helper $@ --profile CrossAccountAccessProfile UseHttpPath = true' > ~/.gitconfig git clone codecommit::<CodeCommit_Repository_Region>://CrossAccountAccessProfile@<CodeCommit_Repository_Name>