讓 SageMaker 筆記本執行個體暫時存取另一個AWS帳戶中的 CodeCommit 儲存庫 - AWS 方案指引

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

讓 SageMaker 筆記本執行個體暫時存取另一個AWS帳戶中的 CodeCommit 儲存庫

由 Helge Aufderheide 建立 (AWS)

環境:生產

技術: DevOps;分析;機器學習和 AI;管理與治理

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

Summary

請注意: AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可以繼續正常使用服務。進一步了解

此模式顯示如何授予 Amazon SageMaker 筆記本執行個體和使用者暫時存取位於另一個AWS帳戶中的AWS CodeCommit 儲存庫。此模式也會顯示如何針對每個實體在每個儲存庫上執行的特定動作,授予精細的許可。

組織通常會將 CodeCommit 儲存庫存放在與託管其開發環境的帳戶不同的AWS帳戶中。此多帳戶設定有助於控制對儲存庫的存取,並降低意外刪除的風險。若要授予這些跨帳戶許可,最佳實務是使用 AWS Identity and Access Management (IAM) 角色。然後,每個AWS帳戶中預先定義的IAM身分可以暫時擔任角色,以跨帳戶建立受控制的信任鏈。

注意:您可以套用類似的程序,將其他IAM身分跨帳戶授予 CodeCommit 儲存庫的存取權。如需詳細資訊,請參閱 AWS CodeCommit 使用者指南 中的使用角色設定跨帳戶對AWS CodeCommit 儲存庫的存取

先決條件和限制

先決條件

  • 具有 CodeCommit 儲存庫的作用中AWS帳戶 (帳戶 A

  • 具有 SageMaker 筆記本執行個體的第二個作用中AWS帳戶 (帳戶 B

  • 具有足夠許可AWS的使用者,可建立和修改帳戶 A 中IAM的角色

  • 具有足夠許可的第二個AWS使用者,可建立和修改帳戶 B 中IAM的角色

架構

下圖顯示將 SageMaker 筆記本執行個體和使用者授予一個AWS帳戶跨帳戶存取 CodeCommit 儲存庫的範例工作流程:

跨帳戶存取的工作流程 CodeCommit

該圖顯示以下工作流程:

  1. 帳戶 B 中的AWS使用者角色和 SageMaker 筆記本執行個體角色擔任具名設定檔

  2. 具名設定檔的許可政策會指定帳戶 A 中的 CodeCommit 存取角色,該角色隨後會擔任該設定檔。

  3. CodeCommit 存取角色在帳戶 A 中的信任政策允許帳戶 B 中的具名設定檔擔任 CodeCommit 存取角色。

  4. 帳戶 A 中的 CodeCommit 儲存庫IAM許可政策允許 CodeCommit 存取角色存取 CodeCommit 儲存庫。

技術堆疊

  • CodeCommit

  • Git

  • IAM

  • pip

  • SageMaker

工具

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

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

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

  • git-remote-codecommit 是一種公用程式,可協助您透過擴充 Git 從 CodeCommit 儲存庫推送和提取程式碼。

  • pip 是 Python 的套件安裝程式。您可以使用 pip 從 Python 套件索引和其他索引安裝套件。

最佳實務

當您使用 IAM 政策設定許可時,請務必僅授予執行任務所需的許可。如需詳細資訊,請參閱 IAM 文件中的套用最低權限許可

實作此模式時,請務必執行下列動作:

  • 確認IAM原則只有執行每個儲存庫中特定、必要動作所需的許可。例如,建議允許核准的IAM原則推送和合併特定儲存庫分支的變更,但只請求合併至受保護的分支。

  • 確認IAM根據每個專案的個別IAM角色和責任指派了不同的角色。例如,開發人員將具有與版本管理員或AWS管理員不同的存取許可。

史詩

任務描述所需的技能

設定 CodeCommit 存取角色和許可政策。

注意:若要自動化此史詩中記錄的手動設定程序,您可以使用AWS CloudFormation 範本

在包含 CodeCommit 儲存庫的 帳戶中 (帳戶 A ),執行下列動作:

  1. 建立可在帳戶 B 中由筆記本執行個體角色擔任IAM的角色。 SageMaker

  2. 建立IAM政策,授予儲存庫存取權,並將政策連接至角色 。僅供測試之用,請選擇 AWSCodeCommitPowerUser AWS 受管政策。此政策會授予除刪除資源功能之外的所有CodeCommit 許可

  3. 修改角色的信任政策,讓帳戶 B 列為受信任實體。

重要事項:將此設定移至生產環境之前,最佳實務是撰寫套用最低權限許可IAM的政策。如需詳細資訊,請參閱此模式的其他資訊區段。

一般 AWS、 AWS DevOps

授予 SageMaker 筆記本執行個體在帳戶 B 中的角色許可,以擔任帳戶 A 中的 CodeCommit 存取角色。

在包含 SageMaker 筆記本執行個體IAM角色的 帳戶中 (帳戶 B),執行下列動作:

  1. 建立允許IAM角色或使用者在帳戶 A 中擔任 CodeCommit 存取角色IAM的政策。

    允許IAM角色或使用者擔任跨帳戶角色的IAM許可政策範例

    {   "Version": "2012-10-17",   "Statement": [       {     "Sid": "VisualEditor0",     "Effect": "Allow",     "Action": "sts:AssumeRole",     "Resource": "arn:aws:iam:::accountA_ID:role/accountArole_ID"   } }
  2. 將政策連接至您 SageMaker 筆記本執行個體在帳戶 B 中的角色。

  3. 讓 SageMaker 筆記本執行個體在帳戶 B 中的角色擔任帳戶 A 中的 CodeCommit 存取角色。

注意:若要檢視儲存庫的 Amazon Resource Name (ARN),請參閱 AWS CodeCommit 使用者指南 中的檢視 CodeCommit 儲存庫詳細資訊

一般 AWS、 AWS DevOps
任務描述所需的技能

在AWS SageMaker 筆記本執行個體上設定使用者設定檔,以擔任帳戶 A 中的角色。

重要事項:請確定已安裝最新版本的AWS命令列介面 (AWS CLI)

在包含 SageMaker 筆記本執行個體 (帳戶 B) 的 帳戶中,執行下列動作:

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

  2. 存取您的 SageMaker 筆記本執行個體 。Jupyter 介面隨即開啟。

  3. 選擇新增 ,然後選擇終端機 新的終端機視窗會在您的 Jupyter 環境中開啟

  4. 導覽至 SageMaker 筆記本執行個體的 ~/.aws/config 檔案。然後,輸入下列陳述式,將使用者設定檔新增至 檔案:

------.aws/config-------------- [profile remoterepouser] role_arn = arn:aws:iam::<ID of Account A>:role/<rolename> role_session_name = remoteaccesssession region = eu-west-1 credential_source = Ec2InstanceMetadata ----------------------------------
一般 AWS、 AWS DevOps

安裝 git-remote-codecommit公用程式。

請遵循 AWS CodeCommit 使用者指南 中的步驟 2:安裝 git-remote-codecommit 中的指示。

資料科學家
任務描述所需的技能

使用 Git 命令或 存取 CodeCommit 儲存庫 SageMaker。

使用 Git

IAM 帳戶 B 中擔任 SageMaker 筆記本執行個體角色的主體現在可以執行 Git 命令來存取帳戶 A 中的 CodeCommit 儲存庫。例如,使用者可以執行 git clonegit pull和 等命令git push

如需指示,請參閱 AWS CodeCommit 使用者指南 中的連線至AWS CodeCommit 儲存庫

如需如何搭配 使用 Git 的詳細資訊 CodeCommit,請參閱 AWS CodeCommit 使用者指南 中的入門AWS CodeCommit

若要使用 SageMaker

若要從 SageMaker 主控台使用 Git,您必須允許 Git 從 CodeCommit 儲存庫擷取憑證。如需指示,請參閱 SageMaker 文件中的將不同AWS帳戶中的 CodeCommit 儲存庫與筆記本執行個體建立關聯

Git、Bash 主控台

相關資源

其他資訊

限制特定動作的 CodeCommit 許可

若要限制IAM主體在 CodeCommit 儲存庫中可以採取的動作,請修改 CodeCommit 存取政策中允許的動作。

如需操作的詳細資訊 CodeCommit API,請參閱 AWS CodeCommit 使用者指南 中的CodeCommit 許可參考

注意:您也可以編輯AWSCodeCommitPowerUserAWS受管政策以符合您的使用案例。

限制對特定儲存庫的 CodeCommit 許可

若要建立僅供特定使用者存取多個程式碼儲存庫的多租戶環境,請執行下列動作:

  1. 在帳戶 A 中建立多個 CodeCommit 存取角色。然後,設定每個存取角色的信任政策,以允許帳戶 B 中的特定使用者擔任該角色。

  2. 透過將「資源」條件新增至每個 CodeCommit 存取角色的政策,限制每個角色可以擔任的程式碼儲存庫。

限制IAM委託人存取特定 CodeCommit 儲存庫的範例 “Resource” 條件

"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]

注意:為協助識別和區分相同AWS帳戶中的多個程式碼儲存庫,您可以將不同的字首指派給儲存庫的名稱。例如,您可以使用符合不同開發人員群組的字首命名程式碼儲存庫,例如 myproject-subproject1-repo1myproject-subproject2-repo1。然後,您可以根據每個開發人員群組指派的字首來建立IAM角色。例如,您可以建立名為 myproject-subproject1-repoaccess 的角色,並授予其存取所有包含 myproject-subproject1 字首的程式碼儲存庫。

範例 “Resource” 條件,指包含特定字首ARN的程式碼儲存庫

"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*