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

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

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

創建者:海爾格奧夫德海德(AWS)

環境:生產

技術: DevOps; 分析; 機器學習和人工智能; 管理與治理

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

Summary

此模式顯示如何授予 Amazon SageMaker 筆記本執行個體和使用者臨時 CodeCommit 存取其他 AWS 帳戶中的 AWS 儲存庫。此模式還顯示了如何為每個實體可以在每個存儲庫上執行的特定操作授予細微的權限。

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

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

先決條件和限制

先決條件

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

  • 具有 SageMaker 筆記本執行個體 (帳戶 B) 的第二個有效 AWS 帳戶

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

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

架構

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

跨帳戶存取的工作流程 CodeCommit

該圖顯示以下工作流程:

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

  2. 具名設定檔的權限原則會在帳戶 A 中指定設定檔隨後假設的 CodeCommit 存取角色。

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

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

技術, 堆棧

  • CodeCommit

  • Git

  • IAM

  • pip

  • SageMaker

工具

  • AWS CodeCommit 是一種版本控制服務,可協助您以私密方式存放和管理 Git 儲存庫,而無需管理自己的原始檔控制系統。

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

  • Git 是一個分佈式版本控制系統,用於在軟件開發過程中跟踪源代碼的變化。

  • git-remote-codecommit是一個實用程序,可以幫助您通過擴展 Git 從 CodeCommit 存儲庫中推送和提取代碼。

  • 點子是 Python 的軟件包安裝程序。您可以使用 pip 從 Python 軟件 Package 索引和其他索引安裝軟件包。

最佳實務

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

實施此模式時,請確保執行以下操作:

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

  • 確認 IAM 原則會根據各自的角色和每個專案的職責,指派不同的 IAM 角色。例如,開發人員擁有與發行管理員或 AWS 管理員不同的存取權限。

史诗

任務描述所需技能

設定 CodeCommit 存取角色和權限原則。

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

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

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

  2. 建立可授與存放庫存取權的 IAM 政策,並將政策附加至該角色。僅用於測試目的,請選擇 AWSCodeCommitPowerUserAWS 受管政策。除了刪除資源的能力外,此原則會授與所有CodeCommit 權限

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

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

一般 AWS、AWS DevOps

授與 SageMaker 記事本執行個體在帳戶 B 中的角色權限,以在帳戶 A 中擔任 CodeCommit 存取角色。

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

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

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

    {   "Version": "2012-10-17",   "Statement": [       {     "Sid": "VisualEditor0",     "Effect": "Allow",     "Action": "sts:AssumeRole",     "Resource": "arn:aws:iam:::accountA_ID:role/accountArole_ID"   } }
  2. 將原則附加至帳戶 B 中 SageMaker 記事本執行個體的角色。

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

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

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

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

重要:請確定您已安裝最新版本的 AWS Command Line Interface (AWS CLI) (AWS CLI)

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

  1. 登入 AWS 管理主控台並開啟主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中的指示。

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

使用 CodeCommit Git 命令或 SageMaker.

若要使用 Git

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

如需指示,請參閱 AWS CodeCommit 使用者指南中的 Connect 到 AWS CodeCommit 儲存庫

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

若要使用 SageMaker

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

Git,bash 控制台

相關資源

其他資訊

將權限 CodeCommit 限制為特定動作

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

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

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

限制特定儲 CodeCommit 存庫的權限

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

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

  2. 「Resource」 條件新增至每個存 CodeCommit 取角色的政策,以限制每個角色可以承擔的程式碼儲存庫。

限制 IAM 主體 CodeCommit 存取特定儲存庫的「資源」條件範例

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

注意:為了協助識別和區分同一 AWS 帳戶中的多個程式碼儲存庫,您可以為存放庫的名稱指派不同的前置詞。例如,您可以使用符合不同開發人員群組的前綴來命名程式碼儲存庫,例如我的專案子專案 1-repo1 和我的專案子專案 2-repo1。然後,您可以根據每個開發人員群組指派的前置詞建立 IAM 角色。例如,您可以建立名為我的專案-子專案 1 重新存取的角色,並將其存取權授與所有包含前置詞 myproject subprojec t1 的程式碼儲存庫。

參照包含特定前綴的代碼存儲庫 ARN 的示例「Resource」條件

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