

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

# 使用 AWS GlueIceberg REST 端點存取 Amazon S3 Tables
<a name="s3-tables-integrating-glue-endpoint"></a>

一旦 S3 資料表儲存貯體與 整合， AWS Glue Data Catalog 您就可以使用端點 AWS Glue Iceberg REST從 Apache Iceberg相容的用戶端連線至 S3 資料表，例如 PyIceberg或 Spark。 AWS Glue Iceberg REST 端點實作 [Iceberg REST Catalog Open API 規格](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml)，提供與Iceberg資料表互動的標準化界面。若要使用端點存取 S3 資料表，您需要透過 IAM 政策和 AWS Lake Formation 授予的組合來設定許可。以下各節說明如何設定存取權，包括建立必要的 IAM 角色、定義必要的政策，以及建立資料庫和資料表層級存取權的 Lake Formation 許可權。

如需使用 PyIceberg 的端對端逐步解說，請參閱[透過 AWS GlueIceberg REST 端點使用 PyIceberg 存取 Amazon S3 Tables 中的資料](https://aws.amazon.com/blogs/storage/access-data-in-amazon-s3-tables-using-pyiceberg-through-the-aws-glue-iceberg-rest-endpoint/)。

**先決條件**
+ [整合資料表儲存貯體與 AWS 分析服務](s3-tables-integrating-aws.md)
+ [建立資料表命名空間](s3-tables-namespace-create.md)
+ [有權存取資料湖管理員帳戶](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)

## 為您的用戶端建立 IAM 角色
<a name="glue-endpoint-create-iam-role"></a>

若要透過 AWS Glue 端點存取資料表，您需要建立具有 AWS Glue 和 Lake Formation 動作許可的 IAM 角色。此程序說明如何建立此角色，並設定其許可權。

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

1. 在左側導覽窗格中選擇 **Policies** (政策)。

1. 選擇**建立政策**，然後在政策編輯器中選擇 **JSON**。

1. 新增下列內嵌政策，以授予存取 AWS Glue 和 Lake Formation 動作的許可：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "glue:GetCatalog",
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:CreateTable",
                   "glue:UpdateTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:catalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/amzn-s3-demo-table-bucket",
                   "arn:aws:glue:us-east-1:111122223333:table/s3tablescatalog/amzn-s3-demo-table-bucket/{{<namespace>}}/*",
                   "arn:aws:glue:us-east-1:111122223333:database/s3tablescatalog/amzn-s3-demo-table-bucket/{{<namespace>}}"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 建立政策後，可建立 IAM 角色，並選擇**自訂信任政策**做為**信任的實體類型**。

1. 針對**自訂信任政策**輸入下列內容。

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

****  

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

------

## 在 Lake Formation 中定義存取權
<a name="define-access-lakeformation"></a>

Lake Formation 會為您的資料湖資料表提供精細的存取控制。當您將 S3 儲存貯體與 整合時 AWS Glue Data Catalog，您的資料表會自動註冊為 Lake Formation 中的資源。若要存取這些資料表，除了 IAM 政策許可權外，您還必須將特定 Lake Formation 許可權授予 IAM 身分。

下列步驟說明如何套用 Lake Formation 存取控制，以允許 Iceberg 用戶端連線至您的資料表。您必須以資料湖管理員身分登入，才能套用這些許可權。

### 允許外部引擎存取資料表的資料
<a name="allow-external-engines"></a>

在 Lake Formation 中，您必須啟用外部引擎的完整資料表存取權，才能存取資料。此允許第三方應用程式在使用對請求的資料表上具有完整許可權的 IAM 角色時，從 Lake Formation 取得臨時憑證。

開啟 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台，並以資料湖管理員身分登入。

1. 在導覽窗格的**管理**下方，選擇**應用程式整合設定**。

1. 選取**允許外部引擎使用完整資料表存取權來存取 Amazon S3 位置中的資料** 然後選擇 **Save** (儲存)。

### 授予資料表資源的 Lake Formation 許可
<a name="grant-lakeformation-permissions"></a>

接著，將 Lake Formation 許可權授予您為與 Iceberg 相容之用戶端建立的 IAM 角色。這些許可權允許該角色在您的命名空間中建立和管理資料表。您需要同時提供資料庫和資料表層級的許可權。如需詳細資訊，請參閱[授予資料表或資料庫的 Lake Formation 許可](grant-permissions-tables.md#grant-lf-table)。

## 設定您的環境以使用端點
<a name="setup-client-glue-irc"></a>

使用資料表存取所需的許可設定 IAM 角色之後，您可以使用下列命令，透過 AWS CLI 使用角色設定 ，從本機電腦執行Iceberg用戶端：

```
aws sts assume-role --role-arn "arn:aws:iam::{{<accountid>}}:role/{{<glue-irc-role>}}" --role-session-name {{<glue-irc-role>}}
```

若要透過 AWS Glue REST端點存取資料表，您需要在Iceberg與 相容的用戶端中初始化目錄。此初始化作業需要指定自訂屬性，包括 sigv4 屬性、端點 URI 和倉儲位置。指定這些屬性，如下所示：
+ Sigv4 屬性 - 必須啟用 Sigv4，簽署名稱為 `glue`
+ 倉儲位置 - 這是您的資料表儲存貯體，以此格式指定：`{{<accountid>}}:s3tablescatalog/{{<table-bucket-name>}}`
+ 端點 URI - 請參閱區域特定端點 AWS Glue 的服務端點參考指南

下列範例示範如何初始化 pyIceberg 目錄。

```
rest_catalog = load_catalog(
        {{s3tablescatalog}},
**{
"type": "rest",
"warehouse": "{{<accountid>}}:s3tablescatalog/{{<table-bucket-name>}}",
"uri": "https://glue.{{<region>}}.amazonaws.com/iceberg",
"rest.sigv4-enabled": "true",
"rest.signing-name": "glue",
"rest.signing-region": region
        }
)
```

如需有關 AWS GlueIceberg REST 端點實作的詳細資訊，請參閱《AWS Glue 使用者指南》**中的[使用 AWS GlueIceberg REST 端點連線至 Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html)。