

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

# Amazon EMR クラスターのリストを設定する
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理者は、ユーザーが利用できる Amazon EMR クラスターを一覧表示できるアクセス許可を付与して、これらのクラスターに接続できるように、SageMaker Studio 実行ロールのアクセス許可を設定できます。アクセスするクラスターは、Studio と同じ AWS アカウント (*単一アカウント*を選択) または別のアカウント (*クロスアカウント*を選択) にデプロイできます。次のページでは、Studio または Studio Classic から Amazon EMR クラスターを表示するためのアクセス許可を付与する方法について説明します。

**重要**  
プライベートスペースから起動される JupyterLab アプリケーションと Studio Classic アプリケーションの Amazon EMR クラスターのみを検出して接続できます。Amazon EMR クラスターが Studio 環境と同じ AWS リージョンにあることを確認します。

データサイエンティストが Studio または Studio Classic から Amazon EMR クラスターを検出して接続できるようにするには、以下の手順を実行します。

## 単一のアカウント
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

Amazon EMR クラスターと Studio または Studio Classic が同じ AWS アカウントにデプロイされている場合は、クラスターにアクセスする SageMaker AI 実行ロールに以下のアクセス許可をアタッチします。

1. **ステップ 1**: プライベートスペースで使用される SageMaker AI 実行ロールの ARN を取得します。

   SageMaker AI のスペースと実行ロールの詳細については、「[ドメインスペースのアクセス許可と実行ロールを理解する](execution-roles-and-spaces.md)」を参照してください。

   SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。

1. **ステップ 2**: Amazon EMR クラスターにアクセスする SageMaker AI 実行ロールに次のアクセス許可を付与します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

   1. **[ロール]** をクリックしてから、**[検索]** フィールドで名前を使って実行ロールを検索します。ロール名は、ARN の最後のスラッシュ (/) の後にある最後の部分です。

   1. ロールへのリンクをクリックします。

   1. **[アクセス許可の追加]** をクリックしてから、**[インラインポリシーの作成]** をクリックします。

   1. **[JSON]** タブで、Amazon EMR アクセスとオペレーションを許可する Amazon EMR アクセス許可を追加します。ポリシードキュメントの詳細については、「[リファレンスポリシー](studio-set-up-emr-permissions-reference.md)」の「*Amazon EMR ポリシーを一覧表示する*」を参照してください。ステートメントのリストをロールのインラインポリシーにコピーする前に、`region` と `accountID` を実際の値に置き換えます。

   1. **[次へ]** をクリックして、**[ポリシー名]** を指定します。

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

**注記**  
Amazon EMR クラスターへのロールベースのアクセスコントロール (RBAC) 接続を使用する場合も、「[Amazon EMR クラスターと Studio が同じアカウントにある場合のランタイムロール認証の設定](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)」を参照する必要があります。

## クロスアカウント
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

開始する前に、プライベートスペースで使用する SageMaker AI 実行ロールの ARN を取得します。

SageMaker AI のスペースと実行ロールの詳細については、「[ドメインスペースのアクセス許可と実行ロールを理解する](execution-roles-and-spaces.md)」を参照してください。

SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。

Amazon EMR クラスターと Studio または Studio Classic が別々の AWS アカウントにデプロイされている場合は、両方のアカウントでアクセス許可を設定します。

**注記**  
Amazon EMR クラスターへのロールベースのアクセスコントロール (RBAC) 接続を使用する場合も、「[クラスターと Studio が別のアカウントにある場合のランタイムロール認証の設定](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)」を参照する必要があります。

**Amazon EMR クラスターアカウントの設定**

*信頼するアカウント*とも呼ばれる、Amazon EMR がデプロイされているアカウントに必要なロールとポリシーを作成するには、次の手順に従います。

1. **ステップ 1**: [Amazon EMR クラスターのサービスロール](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)の ARN を取得します。

   クラスターのサービスロールの ARN を検索する方法については、「[AWS のサービスおよびリソースへのアクセス許可を Amazon EMR に付与する IAM サービスロールの設定](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)」を参照してください。

1. **ステップ 2**: 以下の設定を使用して、`AssumableRole` という名前のカスタム IAM ロールを作成します。
   + アクセス許可: Amazon EMR リソースへのアクセスを許可するために必要なアクセス許可を `AssumableRole` に付与します。このロールは、クロスアカウントアクセスのシナリオでの*アクセスロール*とも呼ばれます。
   + 信頼関係: アクセスを必要とする Studio アカウントから実行ロール (クロスアカウント図の `SageMakerExecutionRole`) を引き受けることができるように、`AssumableRole` の信頼ポリシーを設定します。

   このロールを引き受けることで、Studio または Studio Classic は Amazon EMR で必要なアクセス許可への一時的なアクセスを取得できます。

   Amazon EMR AWS アカウント`AssumableRole`で新しい を作成する方法の詳細については、次の手順に従います。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

   1. 左側のナビゲーションペインで、**[ポリシー]**、**[ポリシーの作成]** の順に選択します。

   1. **[JSON]** タブで、Amazon EMR アクセスとオペレーションを許可する Amazon EMR アクセス許可を追加します。ポリシードキュメントの詳細については、「[リファレンスポリシー](studio-set-up-emr-permissions-reference.md)」の「*Amazon EMR ポリシーを一覧表示する*」を参照してください。ステートメントのリストをロールのインラインポリシーにコピーする前に、`region` と `accountID` を実際の値に置き換えます。

   1. **[次へ]** をクリックして、**[ポリシー名]** を指定します。

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

   1. 左側のナビゲーションペインで、**[ロール]**、**[ロールを作成]** の順に選択します。

   1. **[ロールを作成]** ページで、信頼されたエンティティとして、**[カスタム信頼ポリシー]** を選択します。

   1. **[カスタム信頼ポリシー]** セクションで、以下の JSON ドキュメントに貼り付け、**[次へ]** をクリックします。

------
#### [ For users of Studio and JupyterLab ]

      `studio-account` は Studio アカウント ID に、`AmazonSageMaker-ExecutionRole` は JupyterLab スペースで使用される実行ロールに置き換えます。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      `studio-account` は Studio Classic アカウント ID に置き換えます。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. **[アクセス許可を追加]** ページで、先ほど作成したアクセス許可を追加し、**[次へ]** をクリックします。

   1. **[レビュー]** ページで、`AssumableRole` など、ロール名と、必要に応じて説明を入力します。

   1. ロールの詳細を確認し、[**ロールの作成**] を選択します。

    AWS アカウントでのロールの作成の詳細については、[「IAM ロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

**Studio アカウントの設定**

*信頼されたアカウント*とも呼ばれる Studio がデプロイされているアカウントで、信頼するアカウントのリソースにアクセスするために必要なアクセス許可を使用して、クラスターにアクセスする SageMaker AI 実行ロールを更新します。

1. **ステップ 1**: プライベートスペースで使用される SageMaker AI 実行ロールの ARN を取得します。

   SageMaker AI のスペースと実行ロールの詳細については、「[ドメインスペースのアクセス許可と実行ロールを理解する](execution-roles-and-spaces.md)」を参照してください。

   SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。

1. **ステップ 2**: Amazon EMR クラスターにアクセスする SageMaker AI 実行ロールに次のアクセス許可を付与します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

   1. **[ロール]** をクリックしてから、**[検索]** フィールドで名前を使って実行ロールを検索します。ロール名は、ARN の最後のスラッシュ (/) の後にある最後の部分です。

   1. ロールへのリンクをクリックします。

   1. **[アクセス許可の追加]** をクリックしてから、**[インラインポリシーの作成]** をクリックします。

   1. **[JSON]** タブで、ドメイン、ユーザープロファイル、スペースを更新するロールアクセス許可を付与するインラインポリシーを追加します。ポリシードキュメントの詳細については、「[リファレンスポリシー](studio-set-up-emr-permissions-reference.md)」の「*ドメイン、ユーザープロファイル、およびスペース更新アクションポリシー*」を参照してください。ステートメントのリストをロールのインラインポリシーにコピーする前に、`region` と `accountID` を実際の値に置き換えます。

   1. **[次へ]** をクリックして、**[ポリシー名]** を指定します。

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

   1. **[インラインポリシーの作成]** ステップを繰り返して、実行ロールに `AssumableRole` を引き受け、ロールのアクセスポリシーで許可されるアクションを実行するためのアクセス許可を付与する別のポリシーを追加します。`emr-account` は Amazon EMR アカウント ID に、`AssumableRole` は Amazon EMR アカウントで作成された、引き受けられるロールの名前に置き換えます。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. (オプション) Studio と同じアカウントにデプロイされた Amazon EMR クラスターのリストの一覧表示を許可するには、「[リファレンスポリシー](studio-set-up-emr-permissions-reference.md)」の「*Amazon EMR ポリシーを一覧表示する*」で定義されているとおり、Studio の実行ロールに追加のインラインポリシーを追加します。

1. **ステップ 3**: 引き受けられるロール (アクセスロール) をドメインまたはユーザープロファイルに関連付けます。Studio で JupyterLab を使用する場合は、SageMaker AI コンソールまたは提供されているスクリプトを使用できます。

    ユースケースに対応するタブをクリックします。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   SageMaker AI コンソールを使用して、引き受けられるロールをユーザープロファイルまたはドメインに関連付けるには:

   1. SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) に移動します。

   1. 左側のナビゲーションペインで、**[ドメイン]** を選択して、アクセス許可を更新した SageMaker AI 実行ロールを使ってドメインを選択します。

   1. 
      + ドメインに引き受けられるロール (アクセスロール) を追加するには: **[ドメインの詳細]** ページの**[アプリケーション設定]** タブで、**[JupyterLab]** セクションに移動します。
      + 引き受け可能なロール (アクセスロール) をユーザープロファイルに追加するには: **[ドメインの詳細]** ページで、**[ユーザープロファイル]** タブをクリックして、アクセス許可を更新した SageMaker AI 実行ロールを使用してユーザープロファイルを選択します。**[アプリケーション設定]** タブで、**[JupyterLab]** セクションに移動します。

   1. **[編集]** をクリックして、引き受けられるロール (アクセスロール) の ARN を追加します。

   1. [**Submit**] を選択してください。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    アクセス許可を更新した SageMaker AI 実行ロールを使用してスペースから起動した JupyterLab アプリケーションのターミナルで以下のコマンドを実行します。`domainID`、`user-profile-name`、`emr-accountID`、`AssumableRole` ([RBAC ランタイムロール]() の場合は `EMRServiceRole`) は、適切な値に置き換えます。このコードスニペットは、SageMaker AI ドメイン内の特定のユーザープロファイル (`client.update_userprofile` を使用) またはドメインの設定 (`client.update_domain` を使用) のユーザープロファイル設定を更新します。具体的には、JupyterLab アプリケーションが Amazon EMR アカウント内で Amazon EMR クラスターを実行するための特定の IAM ロール (`AssumableRole`) を引き受けることを許可します。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   Studio Classic の実行ロールに `AssumableRole` の ARN を指定します。Jupyter サーバーは起動時にこの ARN をロードします。Studio が使用する実行ロールは、*信頼するアカウント*の Amazon EMR クラスターを検出して接続するクロスアカウントロールを想定しています。

   この情報は、ライフサイクル設定 (LCC) スクリプトを使用して指定できます。LCC は、ドメインまたは特定のユーザープロファイルにアタッチできます。使用する LCC スクリプトは JupyterServer 設定である必要があります。LCC スクリプトを作成する方法の詳細については、「[Use Lifecycle Configurations with Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)」を参照してください。

   以下は LCC スクリプトの例です。スクリプトを変更するには、`AssumableRole` と `emr-account` をそれぞれの値に置き換えます。クロスアカウントの数は、最大 5 つに制限されています。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    LCC が実行され、ファイルが書き込まれると、サーバーはファイル `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` を読み取り、クロスアカウント ARN を保存します。

------

Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターを検出して接続する方法については、「[Studio または Studio Classic から Amazon EMR クラスターを一覧表示する](discover-emr-clusters.md)」を参照してください。