

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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：//[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 政策以存取擁有者的 AWS Glue Data Catalog**

1. 使用消費者帳戶，登入 AWS 管理主控台。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，展開**存取管理**，然後選擇**政策**。

1. 選擇**建立政策**。

1. 在**指定許可**頁面上，選擇 **JSON**。

1. 在**政策編輯器**中，輸入如下所示的 JSON 陳述式，允許對擁有者帳戶的資料目錄執行 AWS Glue 動作。

------
#### [ 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>

當您編輯工作階段屬性時，請輸入下列屬性。將 *999999999999* 取代為擁有者帳戶 ID。

```
{ 
    "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 規範性指引模式中*[AWS Glue Data Catalog ，使用 Amazon Athena 設定共用 的跨帳戶存取權](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html)。