

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

# SageMaker Studio からの Amazon EMR アプリケーションの一覧表示と起動を有効にするアクセス許可を設定する
<a name="studio-emr-serverless-permissions"></a>

このセクションでは、Studio と EMR Serverless アプリケーションが同じ AWS アカウントまたは異なるアカウントにデプロイされるシナリオを考慮して、SageMaker Studio から EMR Serverless アプリケーションを一覧表示して接続するために必要なロールとアクセス許可について詳しく説明します。

必要なアクセス許可を追加する必要があるロールは、Studio と EMR Serverless アプリケーションが同じ AWS アカウント (*単一アカウント*) に存在するか、別のアカウント (*クロスアカウント*) に存在するかによって異なります。関連するロールタイプは、以下のとおり 2 つあります。
+ 実行ロール:
  + EMR Serverless で使用される[ランタイム実行ロール](https://docs.aws.amazon.com/http://emr/latest/EMR-Serverless-UserGuide/jobs-spark.html#spark-defaults-executionRoleArn) (ロールベースのアクセスコントロールロール): EMR Serverless ジョブ実行環境で使用される IAM ロールで、データアクセス用の Amazon S3、ログ記録用の CloudWatch、 AWS Glue データカタログへのアクセス、ワークロード要件に基づくその他のサービスなど、ランタイムに必要な他の AWS サービスやリソースにアクセスします。EMR Serverless アプリケーションが実行されている アカウントでこれらのロールを作成することをお勧めします。

    ランタイムロールの詳細については、「*EMR Serverless ユーザーガイド*」の「[ジョブランタイムロール](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)」を参照してください。
**注記**  
EMR Serverless アプリケーションには、いくつかの RBAC ロールを定義できます。これらのロールは、組織内のさまざまなユーザーまたはグループが必要とする責任とアクセスレベルに基づいて設定できます。RBAC アクセス許可の詳細については、「[Amazon EMR Serverless のセキュリティに関するベストプラクティス](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-best-practices.html#security-practice-rbac)」を参照してください。
  + SageMaker AI 実行ロール: SageMaker AI が Amazon S3 バケットからのデータの読み取り、CloudWatch へのログの書き込み、ワークフローに必要な他の AWS サービスへのアクセスなど、特定のタスクを実行できるようにする実行ロール。SageMaker AI 実行ロールには、`iam:PassRole` という名前の特別なアクセス許可も付与されています。これにより、SageMaker AI は一時的なランタイム実行ロールを EMR Serverless アプリケーションに渡すことができます。これらのロールは、実行中に他の AWS リソースとやり取りするために必要なアクセス許可を EMR Serverless アプリケーションに付与します。
+ 引き受けられるロール (別名*サービスアクセスロール*):
  + これらは、SageMaker AI の実行ロールが EMR Serverless アプリケーションの管理に関連するオペレーションを実行するために引き受けることができる IAM ロールです。これらのロールでは、EMR Serverless アプリケーションの一覧表示、接続、または管理を行う際に必要なアクセス許可とアクセスポリシーを定義しています。通常、EMR Serverless アプリケーションが SageMaker AI ドメインとは異なる AWS アカウントにあるクロスアカウントシナリオで使用されます。EMR Serverless アプリケーション専用の IAM ロールを持つと、最小特権の原則に従い、Amazon EMR が AWS アカウント内の他のリソースを保護しながらジョブを実行するために必要なアクセス許可のみを持つようになります。

これらのロールを適切に理解して設定することで、SageMaker Studio に EMR Serverless アプリケーションを操作するために必要なアクセス許可を確実に付与できます。これは、同じアカウントにデプロイされている場合も、別々のアカウントにデプロイされている場合にも同様です。

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

次の図は、Studio とアプリケーションが同じ AWS アカウントにデプロイされているときに、Studio から EMR Serverless アプリケーションを一覧表示して接続するために必要なロールとアクセス許可を示しています。

![\[この図は、Studio とアプリケーションが同じ AWS アカウントにある場合に、Studio から EMR Serverless アプリケーションを一覧表示して接続するために必要なロールとアクセス許可を示しています。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-singleaccount.png)


Amazon EMR アプリケーションと Studio が同じ AWS アカウントにデプロイされている場合は、次の手順に従います。

1. **ステップ 1**: データソースに使用する Amazon S3 バケットの ARN を取得し、[Amazon S3 コンソール](https://console.aws.amazon.com/S3) でデータストレージを出力します。

   名前でバケットを検索する方法については、「[Amazon S3 バケットに対するアクセスと一覧表示](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)」を参照してください。Amazon S3 バケットの作成については、「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。

1. **ステップ 2**: アカウント内の EMR Serverless アプリケーションのジョブランタイム実行ロールを少なくとも 1 つ作成します (上記の*単一のアカウント*のユースケース図の `EMRServerlessRuntimeExecutionRoleA`)。信頼されたエンティティとして、**[カスタム信頼ポリシー]** を選択します。ジョブに必要なアクセス許可を追加します。少なくとも、Amazon S3 バケットへのフルアクセスと、 AWS Glue Data Catalog への作成および読み取りアクセスが必要です。

   EMR Serverless アプリケーションの新しいランタイム実行ロールを作成する方法の詳細については、以下の手順を実行します。

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

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

   1. ランタイムロールに必要なアクセス許可を追加し、ポリシーに名前を付けて、**[ポリシーの作成]** をクリックします。

      「[EMR Serverless のジョブランタイムロール](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)」を参照して、EMR Serverless ランタイムロールのサンプルランタイムポリシーを検索できます。

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

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

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

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. **[アクセス許可を追加]** ページで、作成したポリシーを追加してから、**[次へ]** をクリックします。

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

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

   このようなロールを使用すると、ユーザー自身とチームメイトが、データへの個別のアクセスレベルに一致するアクセス許可が設定されたランタイムロールを使用して、同じアプリケーションに接続できます。
**注記**  
Spark セッションの動作はさまざまです。Spark セッションは Studio から使用する実行ロールに基づいて分離されるため、異なる実行ロールを持つユーザーには分離された個別の Spark セッションが提供されます。さらに、ドメインのソース ID を有効にしている場合、さまざまなソース ID 間で Spark セッションをさらに分離できます。

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

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

   SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。
**注記**  
 別の方法として、SageMaker AI を初めて使用するユーザーは、適切なアクセス許可を持つ新しい SageMaker AI 実行ロールを自動的に作成して、セットアッププロセスを簡素化することもできます。この場合、ステップ 3 と 4 はスキップします。代わりに、ユーザーは次のいずれかを実行できます。  
[SageMaker AI コンソール](https://console.aws.amazon.com/sagemaker)の左側のナビゲーションの **[ドメイン]** メニューから新しいドメインを作成する際に、**[組織向けの設定]** オプションを選択します。
コンソールの **[Role Manager]** メニューから新しい実行ロールを作成して、そのロールを既存のドメインまたはユーザープロファイルにアタッチします。
ロールを作成する際に、**[ユーザーが実行する ML アクティビティ]** の **[Studio EMR Serverless アプリケーションの実行]** オプションを選択します。次に、Amazon S3 バケットの名前と、EMR Serverless アプリケーションで使用するジョブランタイム実行ロールを指定します (ステップ 2)。  
SageMaker Role Manager は、EMR Serverless アプリケーションの実行と接続に必要なアクセス許可を新しい実行ロールに自動的に追加します。[SageMaker Role Manager]() を使用すると、EMR Serverless アプリケーションに割り当てることができるランタイムロールは、1 つのみであり、同じアカウント内で作成されたランタイムロールを使用して、Studio がデプロイされているのと同じアカウントで実行する必要があります。

1. **ステップ 4**: EMR Serverless アプリケーションにアクセスする SageMaker AI 実行ロールに以下のアクセス許可をアタッチします。

   1. IAM コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

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

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

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

   1. **[JSON]** タブで、EMR Serverless アクセスとオペレーションを許可する Amazon EMR Serverless アクセス許可を追加します。ポリシードキュメントの詳細については、「[リファレンスポリシー](#studio-set-up-emr-serverless-permissions-reference)」の「*EMR Serverless ポリシー*」を参照してください。ステートメントのリストをロールのインラインポリシーにコピーする前に、*region*、*accountID*、渡された *EMRServerlessAppRuntimeRole* を実際の値に置き換えます。
**注記**  
ランタイムロールの ARN 文字列は、必要に応じてアクセス許可内にカンマで区切って含めることができます。

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

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

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

1. **ステップ 5**:

   ランタイムロールのリストをユーザープロファイルまたはドメインに関連付けると、ロールのリストを視覚的に参照し、JupyterLab から [EMR Serverless アプリケーションに接続する](connect-emr-serverless-application.md)際に使用するロールを選択できます。SageMaker AI コンソールまたは以下のスクリプトを使用できます。その後、ノートブックから作成された Apache Spark または Apache Hive のすべてのジョブは、選択したランタイムロールにアタッチされたポリシーが許可するデータとリソースにのみアクセスするようになります。
**重要**  
このステップを完了しないと、JupyterLab ノートブックを EMR Serverless アプリケーションに接続できなくなります。

------
#### [ 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. **[編集]** をクリックして、EMR Serverless ランタイム実行ロールの ARN を追加します。

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

   次に JupyterLab を介して EMR Serverless アプリケーションに接続すると、ランタイムロールがドロップダウンメニューに表示されて選択できるようになります。

------
#### [ Python script ]

   アクセス許可を更新した SageMaker AI 実行ロールを使用してプライベートスペースから起動した JupyterLab アプリケーションのターミナルで以下のコマンドを実行します。`domainID`、`user-profile-name`、`studio-accountID`、`EMRServerlessRuntimeExecutionRole` は、実際の適切な値に置き換えます。このコードスニペットは、特定のユーザープロファイル (`client.update_user_profile`) またはドメインの設定 (`client.update_domain`) のユーザープロファイル設定を更新します。具体的には、以前に作成した EMR Serverless ランタイム実行ロールを関連付けます。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'ExecutionRoleArns': ["arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleAA"]
           }
           
       }
   })
   resp = client.describe_domain(DomainId="domainID")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

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

次の図は、Studio とアプリケーションが異なる AWS アカウントにデプロイされるときに、Studio から EMR Serverless アプリケーションを一覧表示して接続するために必要なロールとアクセス許可を示しています。

![\[この図は、Studio とアプリケーションが異なる AWS アカウントにある場合に、Studio から EMR Serverless アプリケーションを一覧表示して接続するために必要なロールとアクセス許可を示しています。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-crossaccount.png)


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

始める前に : 
+ プライベートスペースで使用する SageMaker AI 実行ロールの ARN を取得します。SageMaker AI のスペースと実行ロールの詳細については、「[ドメインスペースのアクセス許可と実行ロールを理解する](execution-roles-and-spaces.md)」を参照してください。SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。
+ データソースに使用する Amazon S3 バケットの ARN を取得し、[Amazon S3 コンソール](https://console.aws.amazon.com/S3) でデータストレージを出力します。

  Amazon S3 バケットの作成については、「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。名前でバケットを検索する方法については、「[Amazon S3 バケットに対するアクセスと一覧表示](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)」を参照してください。

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

### EMR Serverless アカウントの設定
<a name="studio-set-up-emr-serverless-permissions-crossaccount-emraccount"></a>

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

1. **ステップ 1**: アカウント内の EMR Serverless アプリケーションのジョブランタイム実行ロールを少なくとも 1 つ作成します (上記の*クロスアカウント*図の `EMRServerlessRuntimeExecutionRoleB`)。信頼されたエンティティとして、**[カスタム信頼ポリシー]** を選択します。ジョブに必要なアクセス許可を追加します。少なくとも、Amazon S3 バケットへのフルアクセスと、 AWS Glue Data Catalog への作成および読み取りアクセスが必要です。

   EMR Serverless アプリケーションの新しいランタイム実行ロールを作成する方法の詳細については、以下の手順を実行します。

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

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

   1. ランタイムロールに必要なアクセス許可を追加し、ポリシーに名前を付けて、**[ポリシーの作成]** をクリックします。

      EMR Serverless ランタイムロールのサンプルランタイムポリシーについては、[「Amazon EMR Serverless のジョブランタイムロール](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)」を参照してください。

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

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

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

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. **[アクセス許可を追加]** ページで、作成したポリシーを追加してから、**[次へ]** をクリックします。

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

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

   このようなロールを使用すると、ユーザー自身とチームメイトが、データへの個別のアクセスレベルに一致するアクセス許可が設定されたランタイムロールを使用して、同じアプリケーションに接続できます。
**注記**  
Spark セッションの動作はさまざまです。Spark セッションは Studio から使用する実行ロールに基づいて分離されるため、さまざまな実行ロールを持つユーザーに、分離された個別の Spark セッションが提供されます。さらに、ドメインのソース ID を有効にしている場合、さまざまなソース ID 間で Spark セッションをさらに分離できます。

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

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

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

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

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

   1. **[JSON]** タブで、EMR Serverless アクセスとオペレーションを許可する Amazon EMR Serverless アクセス許可を追加します。ポリシードキュメントの詳細については、「[リファレンスポリシー](#studio-set-up-emr-serverless-permissions-reference)」の「*EMR Serverless ポリシー*」を参照してください。ステートメントのリストをロールのインラインポリシーにコピーする前に、`region`、`accountID`、渡された `EMRServerlessAppRuntimeRole` を実際の値に置き換えます。
**注記**  
ここでの `EMRServerlessAppRuntimeRole` は、ステップ 1 で作成したジョブランタイム実行ロールです (上記の*クロスアカウント*図の `EMRServerlessAppRuntimeRoleB`)。ランタイムロールの ARN 文字列は、必要に応じてアクセス許可内にカンマで区切って含めることができます。

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

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

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

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

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

      `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"
              }
          ]
      }
      ```

------

   1. **[アクセス許可を追加]** ページで、ステップ 2 で作成した `EMRServerlessAppRuntimeRoleB` アクセス許可を追加してから、**[次へ]** をクリックします。

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

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

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

### Studio アカウントの設定
<a name="studio-set-up-emr-serverless-permissions-crossaccount-studioaccount"></a>

*信頼されたアカウント*とも呼ばれる Studio がデプロイされているアカウントで、信頼するアカウントのリソースにアクセスするために必要なアクセス許可を使用して、EMR Serverless アプリケーションにアクセスする 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**: EMR Serverless アプリケーションにアクセスする SageMaker AI 実行ロールに以下のアクセス許可をアタッチします。

   1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

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

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

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

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

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

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

   1. **[インラインポリシーの作成]** ステップを繰り返して、実行ロールに `AssumableRole` を引き受け、ロールのアクセスポリシーで許可されるアクションを実行するためのアクセス許可を付与する別のポリシーを追加します。

      `emr-account` は Amazon EMR Serverless アカウント ID に、`AssumableRole` は Amazon EMR Serverless アカウントで作成された、引き受けられるロールの名前に置き換えます。

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

****  

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

------

1. **ステップ 3**:

   ランタイムロールのリストをドメインまたはユーザープロファイルに関連付けると、ロールのリストを視覚的に参照し、JupyterLab から [EMR Serverless アプリケーションに接続する](connect-emr-serverless-application.md)際に使用するロールを選択できます。SageMaker AI コンソールまたは以下のスクリプトを使用できます。その後、ノートブックから作成された Apache Spark または Apache Hive のすべてのジョブは、選択したランタイムロールにアタッチされたポリシーが許可するデータとリソースにのみアクセスするようになります。
**重要**  
このステップを完了しないと、JupyterLab ノートブックを EMR Serverless アプリケーションに接続できなくなります。

------
#### [ 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 と EMR Serverless ランタイム実行ロールの ARN を追加します。

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

   次に JupyterLab を介して EMR Serverless アプリケーションに接続すると、ランタイムロールがドロップダウンメニューに表示されて選択できるようになります。

------
#### [ Python script ]

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

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::emr-accountID:role/AnotherRuntimeExecutionRole"]
           }
           
       }
   })
   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))
   ```

------

## リファレンスポリシー
<a name="studio-set-up-emr-serverless-permissions-reference"></a>
+ **EMR Serverless ポリシー**: このポリシーは、一覧表示、作成 (必要な SageMaker AI タグを使用)、起動、停止、詳細の取得、削除、Livy エンドポイントへのアクセス、ジョブ実行ダッシュボードの取得などの EMR Serverless アプリケーションの管理を許可します。必要な EMR Serverless アプリケーションのランタイムロールをサービスに渡すことも許可します。
  + `EMRServerlessListApplications`: 指定したリージョンと AWS アカウント内のすべての EMR Serverless リソースに対して ListApplications アクションを許可します。
  + `EMRServerlessPassRole`: ロールが に渡されている場合にのみ、指定されたランタイムロール (複数可) を指定された AWS アカウントで渡すことを許可します`emr-serverless.amazonaws.com service`。
  + `EMRServerlessCreateApplicationAction`: 指定したリージョンと AWS アカウントの EMR Serverless リソースに対する CreateApplication アクションと TagResource アクションを許可します。ただし、作成またはタグ付けされるリソースには、null 以外の値を持つ特定のタグキー (`sagemaker:domain-arn`、`sagemaker:user-profile-arn`、`sagemaker:space-arn`) が必要です。
  + `EMRServerlessDenyTaggingAction`: リソースに指定されたTagResourceおよび `sagemaker:space-arn`) が設定されていない場合、指定されたリージョンと AWS アカウントの EMR Serverless リソースに対する TagResource `sagemaker:user-profile-arn`および UntagResource アクション。`sagemaker:domain-arn`
  + `EMRServerlessActions`: EMR Serverless リソースにさまざまなアクション (`StartApplication`、`StopApplication`、`GetApplication`、`DeleteApplication`、`AccessLivyEndpoints`、`GetDashboardForJobRun`) を許可します。ただし、リソースに指定されたタグキー (`sagemaker:domain-arn`、`sagemaker:user-profile-arn`、`sagemaker:space-arn`) null 以外の値で設定されている場合に限ります。

  ここで提示する JSON ドキュメントで定義された IAM ポリシーは、このようなアクセス許可を付与しますが、EMR Serverless アプリケーション上の特定の SageMaker AI タグの存在へのアクセスを制限して、特定の SageMaker AI ドメイン、ユーザープロファイル、スペースに関連付けられた Amazon EMR Serverless リソースのみを管理できるようにします。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "EMRServerlessListApplications",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:ListApplications"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*"
          },
          {
              "Sid": "EMRServerlessPassRole",
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/EMRServerlessAppRuntimeRole",
              "Condition": {
                  "StringLike": {
                      "iam:PassedToService": "emr-serverless.amazonaws.com"
                  }
              }
          },
          {
              "Sid": "EMRServerlessCreateApplicationAction",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:CreateApplication",
                  "emr-serverless:TagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "ForAllValues:StringEquals": {
                      "aws:TagKeys": [
                          "sagemaker:domain-arn",
                          "sagemaker:user-profile-arn",
                          "sagemaker:space-arn"
                      ]
                  },
                  "Null": {
                      "aws:RequestTag/sagemaker:domain-arn": "false",
                      "aws:RequestTag/sagemaker:user-profile-arn": "false",
                      "aws:RequestTag/sagemaker:space-arn": "false"
                  }
              }
          },
          {
              "Sid": "EMRServerlessDenyTaggingAction",
              "Effect": "Deny",
              "Action": [
                  "emr-serverless:TagResource",
                  "emr-serverless:UntagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "true",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "true",
                      "aws:ResourceTag/sagemaker:space-arn": "true"
                  }
              }
          },
          {
              "Sid": "EMRServerlessActions",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:StartApplication",
                  "emr-serverless:StopApplication",
                  "emr-serverless:GetApplication",
                  "emr-serverless:DeleteApplication",
                  "emr-serverless:AccessLivyEndpoints",
                  "emr-serverless:GetDashboardForJobRun"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "false",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "false",
                      "aws:ResourceTag/sagemaker:space-arn": "false"
                  }
              }
          }
      ]
  }
  ```

------
+ **ドメイン、ユーザープロファイル、スペースの更新アクションポリシー**: 以下のポリシーは、指定されたリージョンと AWS アカウント内の SageMaker AI ドメイン、ユーザープロファイル、スペースを更新するアクセス許可を付与します。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------