SageMaker ノートブックインスタンスに別の AWS アカウントの CodeCommit リポジトリへの一時的なアクセスを許可する - AWS 規範ガイダンス

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

SageMaker ノートブックインスタンスに別の AWS アカウントの CodeCommit リポジトリへの一時的なアクセスを許可する

作成者: Helge Aufderheide (AWS)

環境:本稼働

テクノロジー: DevOps、分析、機械学習と AI、管理とガバナンス

AWS サービス: AWS、 CodeCommitAWS Identity and Access ManagementAmazon SageMaker

[概要]

このパターンは、別の AWS アカウントの AWS CodeCommit リポジトリへの一時的なアクセスを Amazon SageMaker ノートブックインスタンスとユーザーに付与する方法を示しています。このパターンはまた、各エンティティが各リポジトリで実行できる特定のアクションに対してきめ細かいアクセス権限を付与する方法も示しています。

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

注: 同様の手順を適用して、他の IAM ID に CodeCommit リポジトリへのクロスアカウントアクセスを許可できます。詳細については、AWS ユーザーガイドの「ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する CodeCommit 」を参照してください。

前提条件と制限

前提条件

  • CodeCommit リポジトリを持つアクティブな AWS アカウント (アカウント A)

  • SageMaker ノートブックインスタンスを持つ 2 番目のアクティブな AWS アカウント (アカウント B

  • アカウント A の IAM ロールを作成および変更するための十分な権限を持つ AWS ユーザー

  • アカウント B の IAM ロールを作成および変更するための十分な権限を持つ 2 人目の AWS ユーザー

アーキテクチャ

次の図は、1 つの AWS アカウントの SageMaker ノートブックインスタンスとユーザーに 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 リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

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

  • git-remote-codecommit は、Git を拡張して CodeCommit リポジトリからコードをプッシュおよびプルするのに役立つユーティリティです。

  • pip は Python のパッケージインストーラです。pip を使用して Python Package インデックスやその他のインデックスからパッケージをインストールできます。

ベストプラクティス

IAM ポリシーでアクセス許可を設定するときは、タスクの実行に必要なアクセス許可のみを付与するようにします。詳細については、IAM ドキュメントの最小特権アクセス許可を適用するを参照してください。

このパターンを実装する場合は、必ず以下を実行してください。

  • IAM プリンシパルには、各リポジトリ内で必要な特定のアクションを実行するための権限のみが含まれていることを確認してください。たとえば、承認された IAM プリンシパルは変更を特定のリポジトリブランチにプッシュしてマージすることを許可しますが、保護されたブランチへのマージのみを要求することが推奨されます。

  • IAM プリンシパルには、各プロジェクトのそれぞれのロールと責任に基づいて異なる IAM ロールが割り当てられていることを確認してください。たとえば、開発者はリリースマネージャーや AWS 管理者とは異なるアクセス権限を持ちます。

エピック

タスク説明必要なスキル

CodeCommit アクセスロールとアクセス許可ポリシーを設定します。

注: このエピックで説明されている手動セットアッププロセスを自動化するには、AWS CloudFormation テンプレート を使用できます。

CodeCommit リポジトリを含むアカウント (アカウント A ) で、次の操作を行います。

  1. アカウント B の SageMaker ノートブックインスタンスロールが引き受けることができる IAM ロールを作成します。

  2. リポジトリへのアクセスを許可する IAM ポリシーを作成し、そのポリシーをロールにアタッチします。テストのみを目的として、AWS AWSCodeCommitPowerUser 管理ポリシーを選択します。このポリシーは、リソースを削除する機能を除くすべてのCodeCommit アクセス許可を付与します。

  3. ロールの信頼ポリシーを変更し、信頼できるエンティティとしてアカウント B がリストされるようにします。

重要: ベストプラクティスは、この設定を本稼働環境に移行する前に、最小特権アクセス許可を適用する独自の IAM ポリシーを作成することです。詳細については、このパターンの「追加情報」セクションを参照してください。

AWS 全般、AWS DevOps

アカウント B の SageMaker ノートブックインスタンスのロールに、アカウント 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. アカウント B の SageMaker ノートブックインスタンスのロールにポリシーをアタッチします。

  3. アカウント B の SageMaker ノートブックインスタンスのロールが、アカウント A の CodeCommit アクセスロールを引き受けるようにします。

注: リポジトリの Amazon リソースネーム (ARN) を表示するには、AWS ユーザーガイドの CodeCommit 「リポジトリの詳細を表示する」を参照してください。 CodeCommit

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

AWS SageMaker ノートブックインスタンスでユーザープロファイルを設定して、アカウント A のロールを引き受けます。

重要: 最新バージョンの コマンドラインインターフェイス ( 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 ユーザーガイドの「ステップ 2: インストール git-remote-codecommit」の手順に従います。 CodeCommit

データサイエンティスト
タスク説明必要なスキル

Git コマンドまたは を使用して CodeCommit リポジトリにアクセスします SageMaker。

Git を使用するには

アカウント B で SageMaker ノートブックインスタンスのロールを引き受ける IAM プリンシパルは、Git コマンドを実行して、アカウント A の CodeCommit リポジトリにアクセスできるようになりました。例えば、ユーザーは git clonegit pull、 などのコマンドを実行できますgit push

手順については、AWS ユーザーガイドの「AWS CodeCommit リポジトリに接続する CodeCommit 」を参照してください。

で Git を使用する方法については CodeCommit、AWS ユーザーガイドの CodeCommit「AWS の開始方法 CodeCommit 」を参照してください。

を使用するには SageMaker

SageMaker コンソールから Git を使用するには、Git が CodeCommit リポジトリから認証情報を取得できるようにする必要があります。手順については、 SageMaker ドキュメントの「別の AWS アカウントの CodeCommit リポジトリをノートブックインスタンスに関連付ける」を参照してください。

Git、バッシュコンソール

関連リソース

追加情報

アクセス CodeCommit 許可を特定のアクションに制限する

IAM プリンシパルが CodeCommit リポジトリで実行できるアクションを制限するには、 CodeCommit アクセスポリシーで許可されているアクションを変更します。

CodeCommit API オペレーションの詳細については、AWS ユーザーガイドの「アクセスCodeCommit 許可リファレンス」を参照してください。 CodeCommit

注: ユースケースに合わせて AWS AWSCodeCommitPowerUser 管理ポリシーを編集することもできます。

特定のリポジトリへのアクセス CodeCommit 許可の制限

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

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

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

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

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

注: 同じ AWS アカウント内の複数のコードリポジトリを識別して区別しやすくするために、リポジトリ名に異なるプレフィックスを割り当てることができます。たとえば、myproject-subproject1-repo1myproject-subproject2-repo1 など、異なる開発者グループに対応するプレフィックスを付けた名前をコードリポジトリに付けます。その後、割り当てられたプレフィックスに基づいて、開発者グループごとに IAM ロールを作成できます。たとえば、myproject-subproject1-repoaccess という名前のロールを作成し、myproject-subproject1 というプレフィックスを含むすべてのコードリポジトリへのアクセスをそのロールに付与することができます。

特定のプレフィックスを含むコードリポジトリ ARN を参照する「リソース」条件の例

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