

# AWS Glue Iceberg REST エンドポイントを使用した Amazon S3 テーブルへのアクセス
<a name="s3-tables-integrating-glue-endpoint"></a>

S3 テーブルバケットが AWS Glue Data Catalog と統合されると、PyIceberg や Spark などの Apache Iceberg 互換クライアントから S3 テーブルに接続するために AWS Glue Iceberg REST エンドポイントを使用できます。AWS Glue Iceberg REST エンドポイントは、Iceberg テーブルを操作するための標準化されたインターフェイスを提供する [Iceberg REST Catalog Open API 仕様](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml)を実装しています。エンドポイントを使用して S3 テーブルにアクセスするには、IAM ポリシーと AWS Lake Formation 許可を組み合わせてアクセス許可を設定する必要があります。以降のセクションでは、アクセスの設定方法、具体的には、必要な IAM ロールの作成、必要なポリシーの定義、データベースレベルとテーブルレベルの両方のアクセスに対する Lake Formation 許可の設定などについて説明します。

PyIceberg を使用したエンドツーエンドのチュートリアルについては、「[AWS Glue Iceberg 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. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. 左のナビゲーションペインで、 [**ポリシー**] を選択してください。

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. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) を開き、データレイク管理者としてサインインします。

1. ナビゲーションペインの **[管理]** で、**[アプリケーションの統合設定]** を選択します。

1. **[外部エンジンに、Amazon S3 ロケーション内のデータに対するフルアクセス許可を付与する]** を選択します。次に、**[Save (保存)]** を選択します。

### テーブルリソースに対する Lake Formation 許可の付与
<a name="grant-lakeformation-permissions"></a>

次に、Iceberg 互換クライアント用に作成した IAM ロールに Lake Formation アクセス許可を付与します。これらのアクセス許可により、ロールは名前空間にテーブルを作成して管理できます。データベースレベルとテーブルレベルの両方のアクセス許可を付与する必要があります。詳細については、「[テーブルまたはデータベースに対する 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 Glue Iceberg REST エンドポイントを使用したデータカタログへの接続](https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html)」を参照してください。