本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將一個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 建立關聯的架構。
該圖顯示以下工作流程:
使用者透過
MyCrossAccountRepositoryContributorRole
角色在帳戶 A 中擔任sts:AssumeRole
角色,同時使用帳戶 B 中 SageMaker Studio 中的 SageMaker 執行角色。擔任的角色包含複製並與指定儲存庫互動的 CodeCommit 許可。使用者從 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的政策。 | 秘訣:最佳實務是將IAM政策的範圍限制在使用案例所需的最低許可。 | AWS DevOps |
在帳戶 A 中建立儲存庫存取IAM的角色。 |
| AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
將內嵌政策連接至帳戶 B 中連接至 SageMaker 網域使用者的執行角色。 |
| AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
在帳戶 B 的 SageMaker Studio 中建立 Shell 指令碼。 |
| AWS DevOps |
從系統終端機叫用 Shell 指令碼。 |
您已複製 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>