

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

# 讓 SageMaker 筆記本執行個體暫時存取另一個 AWS 帳戶中的 CodeCommit 儲存庫
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Helge Aufderheide，Amazon Web Services*

## 總結
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

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

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

**注意**  
您可以套用類似的程序，將 CodeCommit 儲存庫的跨帳戶存取權授予其他 IAM 身分。如需詳細資訊，請參閱《[AWS CodeCommit 使用者指南》中的使用角色設定 AWS CodeCommit 儲存庫的跨帳戶存取權](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html)。 *AWS CodeCommit *

## 先決條件和限制
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**先決條件**
+ 具有 CodeCommit 儲存庫的作用中 AWS 帳戶 (*帳戶 A*)
+ 具有 SageMaker 筆記本執行個體的第二個作用中 AWS 帳戶 (*帳戶 B*)
+ 具備足夠許可的 AWS 使用者，可在帳戶 A 中建立和修改 IAM 角色
+ 第二個 AWS 使用者具有足夠的許可，可在帳戶 B 中建立和修改 IAM 角色

## Architecture
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

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

![\[跨帳戶存取 CodeCommit 的工作流程\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


該圖顯示以下工作流程：

1. 帳戶 B 中的 AWS 使用者角色和 SageMaker 筆記本執行個體角色擔任具[名設定檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles)。

1. 具名設定檔的許可政策會指定帳戶 A 中設定檔接著擔任的 CodeCommit 存取角色。

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

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

**技術堆疊**
+ CodeCommit：
+ Git
+ IAM
+ pip
+ SageMaker

## 工具
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 是一種版本控制服務，可協助您私下存放和管理 Git 儲存庫，而無需管理您自己的來源控制系統。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 可透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。
+ [Git](https://git-scm.com/) 是一種分散式版本控制系統，可在軟體開發期間追蹤原始程式碼的變更。
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html) 是一種公用程式，可透過擴展 Git 來協助您從 CodeCommit 儲存庫推送和提取程式碼。
+ [pip](https://pypi.org/project/pip/) 是 Python 的套件安裝程式。您可以使用 pip 從 Python 套件索引和其他索引安裝套件。

## 最佳實務
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

當您使用 IAM 政策設定許可時，請務必僅授予執行任務所需的許可。如需詳細資訊，請參閱 IAM 文件中的[套用最低權限許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。

實作此模式時，請務必執行下列動作：
+ 確認 IAM 原則只有執行每個儲存庫中特定、必要動作所需的許可。例如，建議允許核准的 IAM 原則推送和合併特定儲存庫分支的變更，但只請求合併到受保護的分支。
+ 確認 IAM 原則會根據每個專案各自的角色和責任指派不同的 IAM 角色。例如，開發人員將擁有與發行管理員或 AWS 管理員不同的存取許可。

## 史詩
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### 設定 IAM 角色
<a name="configure-the-iam-roles"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 CodeCommit 存取角色和許可政策。 | 若要自動化此史詩中記錄的手動設定程序，****您可以使用 [AWS CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)。在包含 CodeCommit 儲存庫 (*帳戶 A*) 的帳戶中，執行下列動作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)在將此設定移至生產環境之前，最佳實務是撰寫您自己的 IAM 政策，以套用[最低權限許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。如需詳細資訊，請參閱此模式**的其他資訊**一節。 | 一般 AWS、AWS DevOps | 
| 授予帳戶 B 中的 SageMaker 筆記本執行個體角色許可，以在帳戶 A 中擔任 CodeCommit 存取角色。 | 在包含 SageMaker 筆記本執行個體 IAM 角色 (*帳戶 B)* 的帳戶中，執行下列動作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)若要檢視儲存庫的 Amazon Resource Name (ARN)，請參閱《AWS [ CodeCommit 使用者指南》中的檢視 CodeCommit 儲存庫詳細資訊](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html)。 *AWS CodeCommit * | 一般 AWS、AWS DevOps | 

### 在帳戶 B 中設定 SageMaker 筆記本執行個體
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 AWS SageMaker 筆記本執行個體上設定使用者設定檔，以擔任帳戶 A 中的角色。 | [請確定您已安裝最新版本的 AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。在包含 SageMaker 筆記本執行個體 (*帳戶 B)* 的帳戶中，執行下列動作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | 一般 AWS、AWS DevOps | 
| 安裝 git-remote-codecommit 公用程式。 | 請遵循 *AWS CodeCommit 使用者指南*中的[步驟 2：安裝 git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install) 中的指示。 | 資料科學家 | 

### 存取儲存庫
<a name="access-the-repository"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 使用 Git 命令或 SageMaker 存取 CodeCommit 儲存庫。 SageMaker | **使用 Git**帳戶 B 中擔任 SageMaker 筆記本執行個體角色的 IAM 主體現在可以執行 Git 命令來存取帳戶 A 中的 CodeCommit 儲存庫。例如，使用者可以執行 `git clone`、 `git pull`和 等命令`git push`。如需說明，請參閱《[AWS CodeCommit 使用者指南》中的連線至 AWS CodeCommit 儲存庫](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)。 *AWS CodeCommit *如需如何搭配 CodeCommit 使用 Git 的詳細資訊，請參閱[AWS CodeCommit 使用者指南》中的 AWS CodeCommit 入門](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html)。 *AWS CodeCommit ***使用 SageMaker**若要從 SageMaker 主控台使用 Git，您必須允許 Git 從 CodeCommit 儲存庫擷取登入資料。如需說明，請參閱 SageMaker 文件中的將[不同 AWS 帳戶中的 CodeCommit 儲存庫與筆記本執行個體建立關聯](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html)。 | Git、Bash 主控台 | 

## 相關資源
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [使用角色設定 AWS CodeCommit 儲存庫的跨帳戶存取權](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) (AWS CodeCommit 文件）
+ [IAM 教學課程：使用 IAM 角色在 AWS 帳戶之間委派存取權 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)(IAM 文件）

## 其他資訊
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**限制 CodeCommit 對特定動作的許可**

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

如需 CodeCommit API 操作的詳細資訊，請參閱《AWS [CodeCommit 使用者指南》中的 CodeCommit 許可參考](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html)。 *AWS CodeCommit *

**注意**  
您也可以編輯 [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser) AWS 受管政策，以符合您的使用案例。

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

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

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

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

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

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

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

**參考包含特定字首的程式碼儲存庫 ARN 的「資源」條件範例**

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