

# Athena for Spark でクロスアカウント AWS Glue アクセスを設定する
<a name="spark-notebooks-cross-account-glue"></a>

このトピックでは、コンシューマーアカウント *666666666666* と所有者アカウント *999999999999* を AWS Glue へのクロスアカウントアクセス用に設定する方法を示します。アカウントを設定すると、コンシューマーアカウントで所有者の AWS Glue データベースとテーブルに対して Athena for Spark からのクエリを実行できます。

## ステップ 1: AWS Glue で、コンシューマーロールへのアクセスを提供します。
<a name="spark-notebooks-cross-account-glue-in-aws-glue-provide-access-to-the-consumer-account"></a>

AWS Glue では、所有者がコンシューマーのロールに所有者の AWS Glue データカタログへのアクセスを許可するポリシーを作成します。

**コンシューマーロールに所有者のデータカタログへのアクセスを許可する AWS Glue ポリシーを追加するには**

1. カタログ所有者のアカウントを使用して、AWS マネジメントコンソール にログインします。

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

1. ナビゲーションペインで、**[データカタログ]** を展開し、**[カタログ設定]** を選択します。

1. **[データカタログ設定]** ページの **[アクセス許可]** セクションで、次のようなポリシーを追加します。このポリシーでは、コンシューマーアカウント *666666666666* に、所有者アカウント *999999999999* のデータカタログへのアクセスを許可します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Cataloguers",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::666666666666:role/Admin",
                       "arn:aws:iam::666666666666:role/AWSAthenaSparkExecutionRole"
                   ]
               },
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-west-2:999999999999:catalog",
                   "arn:aws:glue:us-west-2:999999999999:database/*",
                   "arn:aws:glue:us-west-2:999999999999:table/*"
               ]
           }
       ]
   }
   ```

------

## ステップ 2: アクセス用にコンシューマ アカウントを構成する
<a name="spark-notebooks-cross-account-glue-configure-the-consumer-account-for-access"></a>

コンシューマーアカウントで、所有者の AWS Glue Data Catalog、データベース、テーブルへのアクセスを許可するポリシーを作成し、そのポリシーをロールにアタッチします。次の例では、コンシューマーアカウント *666666666666* を使用しています。

**所有者の AWS Glue Data Catalog にアクセスするための AWS Glue ポリシーを作成するには**

1. コンシューマーアカウントを使用して、AWS マネジメントコンソール にログインします。

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

1. ナビゲーションペインの **[アクセス管理]** を展開し、**[ポリシー]** を選択します。

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

1. **[アクセス許可の指定]** ページで、**[JSON]** を選択します。

1. **ポリシーエディターで**、所有者アカウントのデータカタログに対する AWS Glue アクションを許可する次のような JSON ステートメントを入力します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/*",
                   "arn:aws:glue:us-east-1:999999999999:table/*"
               ]
           }
       ]
   }
   ```

------

1. **[次へ]** をクリックします。

1. **[確認と作成]** ページで、**[ポリシー名]** にポリシーの名前を入力します。

1. **[ポリシーを作成]** を選択します。

次に、コンシューマーアカウントの IAM コンソールを使用して、作成したポリシーをIAM ロールまたはコンシューマーアカウントが所有者のデータカタログにアクセスするために使用するロールにアタッチします。

**AWS Glue ポリシーをコンシューマーアカウントのロールにアタッチするには**

1. コンシューマーアカウントの IAM コンソールのナビゲーションペインで **[ロール]** を選択します。

1. **[ロール]** ページで、ポリシーをアタッチしたいロールを探します。

1. **[アクセス許可を追加]**、**[ポリシーをアタッチ]** の順に選択します。

1. 作成したポリシーを見つけます。

1. ポリシーのチェックボックスを選択し、**[アクセス許可を追加]** を選択します。

1. 手順を繰り返して、使用したい他のロールにこのポリシーを追加します。

## ステップ 3: セッションの設定とクエリの作成
<a name="spark-notebooks-cross-account-glue-configure-a-session-and-create-a-query"></a>

Athena Spark のリクエスタアカウントで、指定したロールを使用して[ノートブックの作成する](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook)か、または[現在のセッションを編集する](notebooks-spark-getting-started.md#notebooks-spark-getting-started-editing-session-details)ことで、アクセスをテストするセッションを作成します。[セッションプロパティを設定](notebooks-spark-custom-jar-cfg.md#notebooks-spark-custom-jar-cfg-console)する場合は、次のいずれかを指定します。
+ **AWS Glue カタログ区切り文字** — このアプローチでは、クエリに所有者のアカウント ID を含めます。セッションを使用して別の所有者のデータカタログをクエリする場合は、この方法を使用してください。
+ **AWS Glue カタログ ID** — このアプローチでは、データベースに直接クエリを実行します。この方法は、セッションを使用して 単一の所有者のデータカタログのみをクエリする場合に便利です。

### AWS Glue カタログ区切り文字を使用する
<a name="spark-notebooks-cross-account-glue-using-the-glue-catalog-separator-approach"></a>

セッションプロパティを編集するときは、以下を追加します。

```
{ 
    "spark.hadoop.aws.glue.catalog.separator": "/" 
}
```

セルでクエリを実行するときは、次の例のような構文を使用します。この `FROM` 節では、データベース名の前にカタログ ID と区切り文字が必要であることに注意してください。

```
df = spark.sql('SELECT requestip, uri, method, status FROM `999999999999/mydatabase`.cloudfront_logs LIMIT 5') 
df.show()
```

### AWS Glue カタログ ID を使用する
<a name="spark-notebooks-cross-account-glue-using-the-glue-catalog-id-approach"></a>

セッションプロパティを編集するときは、次のプロパティを入力します。所有者アカウント ID は *999999999999* に置き換えてください。

```
{ 
    "spark.hadoop.hive.metastore.glue.catalogid": "999999999999" 
}
```

セルでクエリを実行するときは、次のような構文を使用します。 この `FROM` 節では、データベース名の前にカタログ ID と区切り文字を挿入する必要がないことに注意してください。

```
df = spark.sql('SELECT * FROM mydatabase.cloudfront_logs LIMIT 10') 
df.show()
```

## その他のリソース
<a name="spark-notebooks-cross-account-glue-additional-resources"></a>

[AWS Glue データカタログへのクロスアカウントアクセスを構成する](security-iam-cross-account-glue-catalog-access.md)

「*AWS Lake Formation デベロッパーガイド*」の「[AWS Glue と Lake Formation の両方を使用したクロスアカウント許可の管理](https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-cross-account.html)」を参照してください。

「*AWS Prescriptive Guidance Patterns*」ガイドの「[Amazon Athena を使用して、共有 AWS Glue Data Catalog へのクロスアカウントアクセスを設定します](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html)」。　