

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 リポジトリへの一時的なアクセスを許可する方法を示しています。このパターンはまた、各エンティティが各リポジトリで実行できる特定のアクションに対してきめ細かいアクセス権限を付与する方法も示しています。

組織は多くの場合、開発環境をホストするアカウントとは別の AWS アカウントに CodeCommit リポジトリを保存します。このマルチアカウント設定は、リポジトリへのアクセスを制御し、リポジトリを誤って削除するリスクを軽減するのに役立ちます。クロスアカウントアクセス権の付与には、AWS Identity and Access Management (IAM) ロールを使用するのがベストプラクティスです。これにより、各 AWS アカウントの事前定義済みの IAM アイデンティティが一時的にロールを引き受け、アカウント間で制御された信頼の連鎖を構築できます。

**注記**  
同様の手順を適用して、他の IAM アイデンティティに CodeCommit リポジトリへのクロスアカウントアクセスを許可できます。詳細については、「*AWS CodeCommit ユーザーガイド*」の「[ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを構成する](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html)」を参照してください。

## 前提条件と制限
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**前提条件**
+ CodeCommit リポジトリを持つアクティブな AWS アカウント (*アカウント A*)
+ SageMaker ノートブックインスタンスを持つ 2 つ目のアクティブな AWS アカウント (*アカウント B*)
+ アカウント A の IAM ロールを作成および変更するための十分な権限を持つ AWS ユーザー
+ アカウント B の IAM ロールを作成および変更するための十分な権限を持つ 2 人目の AWS ユーザー

## アーキテクチャ
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

以下の図は、SageMaker ノートブックインスタンスと 1 つの AWS アカウントのユーザーに CodeCommit リポジトリへのクロスアカウントアクセスを許可するワークフローの例を示しています。

![\[CodeCommit へのクロスアカウントアクセスを許可するワークフロー\]](http://docs.aws.amazon.com/ja_jp/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. アカウント A の CodeCommit リポジトリの 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 Package インデックスやその他のインデックスからパッケージをインストールできます。

## ベストプラクティス
<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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 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/ja_jp/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)ベストプラクティスは、この設定を本稼働環境に移行する前に、[最小特権アクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)を適用する独自の IAM ポリシーを作成することです。詳細については、このパターンの「**追加情報**」セクションを参照してください。 | AWS 全般、AWS DevOps | 
| アカウント B の SageMaker ノートブックインスタンスのロールに、アカウント A の CodeCommit アクセスロールを引き受ける権限を付与します。 | SageMaker ノートブックインスタンスの IAM ロールを含むアカウント (*アカウント B*) で、次の操作を行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)注: リポジトリの Amazon リソースネーム (ARN) を表示するには、「*AWS CodeCommit ユーザーガイド*」の「[CodeCommit リポジトリの詳細を表示する](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html)」を参照してください。 | AWS 全般、AWS DevOps | 

### アカウント B に SageMaker ノートブックインスタンスを設定する
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS SageMaker ノートブックインスタンスにユーザープロファイルを設定して、アカウント A のロールを引き受けます。 | [最新バージョンの AWS コマンドラインインターフェイス (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/ja_jp/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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Git コマンドまたは SageMaker を使用して CodeCommit リポジトリにアクセスする。 | **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)」 を参照してください。CodeCommit で Git を使用する方法については、「*AWS CodeCommit ユーザーガイド*」の「[AWS CodeCommit 入門](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html)」を参照してください。**SageMaker を使用するには**SageMaker コンソールから Git を使用するには、Git が CodeCommit リポジトリから認証情報を取得できるよう許可する必要があります。手順については、「SageMaker ドキュメント」の「[別の アカウントの CodeCommit リポジトリをノートブックインスタンスに関連付ける](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html)」を参照してください。 | Git、バッシュコンソール | 

## 関連リソース
<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 チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任](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)」を参照してください。

**注記**  
[AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser) AWS マネージドポリシーをユースケースに合わせて編集することもできます。

**CodeCommit 権限を特定のリポジトリに制限する**

特定のユーザーだけが複数のコードリポジトリにアクセスできるマルチテナント環境を作成するには、次の操作を行います。

1. アカウント A に複数の CodeCommit アクセスロールを作成します。次に、アカウント B の特定のユーザーがロールを引き受けることができるように、各アクセスロールの信頼ポリシーを構成します。

1. 各 CodeCommit アクセスロールのポリシーに「**リソース**」条件を追加して、各ロールが引き受けることができるコードリポジトリを制限します。

**特定の CodeCommit リポジトリに対する IAM プリンシパルのアクセスを制限する「リソース」条件の例**

```
"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-*
```