1 つの AWS アカウントにある AWS CodeCommit レポジトリを別のアカウントの Amazon SageMaker AI Studio Classic に関連付ける - AWS 規範的ガイダンス

1 つの AWS アカウントにある AWS CodeCommit レポジトリを別のアカウントの Amazon SageMaker AI Studio Classic に関連付ける

Amazon Web Services、Laurens van der Maas,Aubrey Oosthuizen

概要

注意: 新規のお客様への AWS CodeCommit の提供は終了しました。AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細

このパターンでは、1 つの AWS アカウント (アカウント A) にある AWS CodeCommit を、別の AWS アカウントにある Amazon SageMaker AI Studio Classic に関連付ける方法の手順とコードを提供します。関連付けを設定するには、アカウント A に AWS Identity and Access Management (IAM) ポリシーとロールを作成し、アカウント B に IAM インラインポリシーを作成する必要があります。次に、シェルスクリプトを使用して CodeCommit リポジトリをアカウント A からアカウント B の Amazon SageMaker AI にクローンします。

前提条件と制限

前提条件

  • 2 つの AWS アカウントのうち 1 つには CodeCommit リポジトリが、もう 1 つにはユーザーの SageMaker AI ドメインが含まれていること

  • インターネットアクセスがある、または仮想プライベートネットワーク (VPC) エンドポイント経由で CodeCommit および AWS Security Token Service (AWS STS) にアクセスできる、プロビジョニング済みの SageMaker AI ドメインとユーザー

  • IAM」の基本的な理解

  • SageMaker AI Studio Classic の基本的な理解

  • GitCodeCommit に関する基本的な知識

機能制限

このパターンは SageMaker AI Studio Classic にのみ適用され、RStudio on Amazon SageMaker AI には適用されません。

アーキテクチャ

テクノロジースタック

  • Amazon SageMaker AI

  • Amazon SageMaker AI Studio Classic

  • AWS CodeCommit

  • AWS Identity and Access Management (IAM)

  • Git

ターゲットアーキテクチャ

以下の図は、アカウント A の CodeCommit リポジトリをアカウント B の SageMaker AI Studio Classic に関連付けるアーキテクチャを示したものです。

クロスアカウント関連付けのアーキテクチャ図

この図表は、次のワークフローを示しています:

  1. ユーザーはアカウント A の sts:AssumeRole ロールを通じてアカウント A の MyCrossAccountRepositoryContributorRole ロールを引き受け、アカウント B の SageMaker AI Studio Classic で SageMaker AI 実行ロールを使用します。引き受けたロールには、指定されたリポジトリをクローンして操作するための CodeCommit 権限が含まれています。

  2. ユーザーは Git コマンドを SageMaker AI Studio Classic のシステムターミナルから実行します。

自動化とスケール

このパターンは、AWS Cloud Development Kit (AWS CDK)AWS CloudFormationTerraform のいずれかを使用することで自動化できる手動のステップで構成されています。

ツール

AWS ツール

  • Amazon SageMaker AI はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。

  • Amazon SageMaker AI Studio Classic は、ウェブベースの機械学習用の統合開発環境 (IDE) です。この IDE を使うと、機械学習モデルを構築、トレーニング、デバッグ、デプロイ、モニタリングできます。

  • AWS CodeCommit は、独自のソースコントロールシステムを管理しなくても、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。

    注意: 新規のお客様への AWS CodeCommit の提供は終了しました。AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細

  • AWS Identity and Access Management (IAM)」では、リソースの使用を認証、許可されるユーザーを制御することで、AWSリソースへのアクセスを安全に管理できます。

その他のツール

  • Git」は、ソフトウェア開発中のソースコードの変更を追跡するための分散型バージョン管理システムです。

エピック

タスク説明必要なスキル

Account A でリポジトリアクセスの IAM ポリシーを作成します。

  1. AWS マネジメントコンソール にサインインして、[IAM コンソール] を開きます。

  2. ナビゲーションペインで、[Policies] を選択し、次に [Create policy] を選択します。

  3. [JSON] タブを選択します。

  4. このパターンの追加情報セクションにある IAM ポリシーの例からポリシーステートメントをコピーし、そのステートメントを JSON エディタに貼り付けます。ポリシー内のすべてのプレースホルダー値を必ず置き換えてください。

  5. [Next:Tags] を選択し、続いて [Next:Review] を選択します。

  6. [名前] にポリシーの名前を入力します。: このパターンでは IAM ポリシーは「CrossAccountAccessForMySharedDemoRepo」と呼ばれていますが、ユーザーは任意のポリシー名を選択できます。

  7. [Create policy] (ポリシーの作成) を選択します。

ヒント

IAM ポリシーの範囲をユースケースに最低限必要なアクセス権限に制限するのがベストプラクティスです。

AWS DevOps

Account A でリポジトリアクセスの IAM ロールを作成します。

  1. IAM コンソールのナビゲーションペインで、ロール、ロールを作成の順に選択します。

  2. 信頼できるエンティティタイプには、AWS アカウントを選択します。

  3. AWS アカウントセクションで、別の AWS アカウントを選択します。

  4. アカウント ID に対して、アカウント B のアカウント ID を入力します。

  5. アクセス許可を追加ページで、以前に作成された CrossAccountAccessForMySharedDemoRepo ポリシーを検索し、選択します。

  6. [次へ] を選択します。

  7. [Role name] (ロール名) に名前を入力します。注:このパターンでは IAM ロール名はMyCrossAccountRepositoryContributorRoleと呼ばれますが、好きなロール名を選択できます。

  8. ロールの作成を選択し、新しいロールの Amazon リソースネーム (ARN) をコピーします。

AWS DevOps
タスク説明必要なスキル

アカウント B の SageMaker ドメインユーザーにアタッチされている実行ロールにインラインポリシーをアタッチします。

  1. IAM コンソールのナビゲーションペインでロールを選択します。

  2. アカウント B の SageMaker AI ドメインユーザーに割り当てられている実行ロールを検索して選択します。

  3. アクセス許可を追加、インラインポリシーを作成の順に選択します。

  4. [JSON] タブを選択します。

  5. 次のポリシーステートメントをコピーして、 JSON エディタに貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<Account_A_ID>:role/<Account_A_Role_Name>" } ] }
  6. アカウント A のアカウント ID <Account_A_Role_Name> に置き換え、前に作成した IAM ロールの名前 <Account_A_ID> に置き換えます。

  7. [ポリシーの確認] を選択します。

  8. 名前に対して、インラインポリシーの名前を入力します。

  9. [Create policy] (ポリシーの作成) を選択します。

AWS DevOps
タスク説明必要なスキル

アカウント B の SageMaker AI Studio Classic でシェルスクリプトを作成します。

  1. SageMaker コンソール」 のナビゲーションペインで、 Studio を選択します。

  2. ユーザープロファイルを選択し、Open Studio を選択します。

  3. ホームセクションでランチャーを開くを選択します。

  4. ユーティリティとファイルセクションで、テキストファイルを選択します。

  5. このパターンの「追加情報」セクションにある Example SageMaker シェルスクリプトからスクリプトをコピーし、そのステートメントを新しいファイルに貼り付けます。スクリプトのすべてのプレースホルダー値を置き換えます。

  6. 新しいファイルの untitled.txt タブを右クリックし、テキストの名前を変更を選択します。新しい名前に cross_account_git_clone.sh と入力し、名前の変更を選択します。

AWS DevOps

システムターミナルからシェルスクリプトを呼び出します。

  1. SageMaker コンソールのホームセクションで、「ランチャーを開く」を選択します。

  2. ユーティリティとファイルセクションで、システムターミナルを選択します。

  3. ターミナルで、以下のコマンドを実行します。

    chmod u+x ./cross_account_git_clone.sh && ./cross_account_git_clone.sh

SageMaker AI Studio Classic のクロスアカウントで CodeCommit リポジトリのクローンが作成されました。システムターミナルからすべての Git コマンドを実行できるようになりました。

AWS DevOps

追加情報

IAM ポリシーの例:

この例のポリシーを使用するには、次を行います。

  • <CodeCommit_Repository_Region> をリポジトリの AWS リージョンに置き換えます。

  • アカウント A のアカウント ID で <Account_A_ID> を置き換えます。

  • アカウント A の CodeCommit リポジトリの名前に <CodeCommit_Repository_Name> 置き換えてください。

{ "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 AI シェルスクリプトの例

この例のスクリプトを使用するには、次を行います。

  • アカウント A のアカウント ID で <Account_A_ID> を置き換えます。

  • 前に作成した IAM ロールの名前で <Account_A_Role_Name> を置き換えます。

  • <CodeCommit_Repository_Region> をリポジトリの AWS リージョンに置き換えます。

  • アカウント A の CodeCommit リポジトリの名前に <CodeCommit_Repository_Name> を置き換えてください。

#!/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>