

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

# Snowflake Iceberg Catalog へのフェデレーション
<a name="catalog-federation-snowflake"></a>

AWS Glue Data Catalog は、Snowflakeサービスプリンシパルの OAuth2 認証情報Snowflakeを使用して にフェデレーションします。このフェデレーションを使用して、 Snowflake Horizonおよび Snowflake Polarisカタログに接続できます。この認証メカニズムにより、Data Catalog はサービスプリンシパルに関連付けられた権限に基づいて、カタログ内のさまざまなオブジェクト (カタログ、データベース、テーブルなど) のメタデータにアクセスできます。適切なオブジェクトへのアクセスを確保するには、これらのオブジェクトのメタデータを読み取るために必要なアクセス許可Snowflakeを のサービスプリンシパルに付与することが重要です。

## 前提条件
<a name="catalog-federation-snowflake-prerequisites"></a>

Lake Formation によって管理されるフェデレーティッドカタログを Data Catalog で作成する前に、次のアクセス許可があることを確認してください。

IAM プリンシパル (ユーザーまたはロール) には、次のアクセス許可が必要です。
+ **Lake Formation のアクセス許可** – `lakeformation:RegisterResource`、 `lakeformation:DescribeResource`
+ アクセス**AWS Glue 許可** – `glue:CreateConnection`、`glue:CreateCatalog`、`glue:GetConnection`、 `glue:PassConnection`
+ **Secrets Manager のアクセス許可** – `secretsmanager:CreateSecret`、 `secretsmanager:GetSecretValue`
+ **IAM アクセス許可** – `iam:CreateRole`、`iam:AttachRolePolicy`、 `iam:PassRole`

Lake Formation データレイク管理者であるか、データカタログに対する`CREATE_CATALOG`アクセス許可を持っている必要があります

## フェデレーティッドカタログの作成
<a name="catalog-federation-snowflake-create"></a>

### コンソールの使用
<a name="catalog-federation-snowflake-console"></a>

1. コンソールにサインインし、[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で Lake Formation コンソールを開きます。

1. 右上のページセクションで任意の AWS リージョンを選択します。

1. 左側のナビゲーションペインで、[カタログ] を選択します。

1. **Create Catalog** を選択して、**Create Catalog ワークフロー**を開きます。

1. **データソースの選択**ステップで、使用可能なオプションSnowflakeから を選択します。

1. **カタログの詳細を設定する**ステップでは、カタログの詳細、接続の詳細、登録の詳細の 3 つの情報を指定します。

1. **カタログ詳細**コンテナで、フェ AWS Glue デレーティッドカタログに一意の名前を指定し、既存のSnowflakeカタログの名前を入力します。

1. **接続の詳細**コンテナでは、アクセス可能な既存の接続から選択するか、新しいコネクタを作成するための設定を指定できます。

1. 新しい接続設定は次のとおりです。
   + 接続名 – AWS Glue 接続オブジェクトの一意の名前。
   + インスタンス URL – 既存のSnowflakeアカウントのエンドポイント URL。
   + 認証 – がリモートカタログサーバーへの接続 AWS Glue に使用する認証設定を指定します。 は OAuth2 認証とカスタム認証の両方 AWS Glue をサポートします。
   + トークン URL – リモートカタログの ID プロバイダーの URL を指定します。
   + OAuth2 クライアント ID – リモートカタログに関連付けられた OAuth2 認証情報のクライアント ID を指定します。
   + シークレット – を使用して OAuth2 クライアントシークレットを保存して使用する AWS Secrets Manager か、テキストボックスにシークレット値を入力します。コンソールでシークレットを手動で入力すると、 はユーザーに代わってシークレット AWS Glue を作成します。
   + トークン URL スコープ – 認証の OAuth スコープを指定します。
   + カタログケーシングフィルター – リモートカタログから Data Catalog に小文字または大文字のオブジェクトを持ち込むかどうかを選択します。

1.  AWS Glue と Lake Formation サービスプリンシパルがそれぞれリモート Iceberg テーブルの AWS Secrets Manager と Amazon S3 ロケーションのシークレットにアクセスするために使用できる IAM ロールを作成します。登録ドロップダウンで IAM ロールを選択します。IAM ポリシーの詳細については、次の CLI セクションのステップ 2 と 3 を参照してください。

1. 接続のテストを選択して、接続プロパティと IAM ロールアクセスが正しく設定されているかどうかをテストします。

1. 次**へ** を選択して設定を確認します。

1. レビューページで**カタログの作成**を選択します。

### CLI を使用する
<a name="snowflake-federation-cli"></a>

1. <a name="snowflake-step-1"></a>** AWS Secrets Manager シークレットを作成する**

    AWS Glue コネクタは、**OAuth2** と Custom の 2 つの認証タイプをサポートしています。 ****OAuth2 オプションを使用する場合は、 AWS Secrets Manager を使用してSnowflakeサービスプリンシパルのクライアントシークレットを保存します。このシークレットは、後で AWS Glue 接続を作成するときに使用します。カスタム認証では、 AWS Secrets Manager を使用してアクセストークンを保存および取得します。

   次の例では、`your-snowflake-secret`、 `client_secret``region`を独自の情報に置き換えます。

   ```
   aws secretsmanager create-secret \
   --name your-snowflake-secret \
   --description "Snowflake secret" \
   --secret-string '{
   "USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "client_secret"
   }' \
   --region region
   ```
**注記**  
`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` は、 AWS Glue を使用してシークレット内のクライアントシークレット値を参照する予約キーワードです。Lake Formation コンソールでシークレットを作成するときにも、同じキーワードを使用します。

1. <a name="snowflake-step-2"></a>**前のステップで作成したシークレットへのアクセスを AWS Glue 接続オブジェクトに許可する IAM ロールを作成する**

    AWS Glue 接続オブジェクトでは、 AWS Secrets Manager を使用して OAuth AWS Secrets Manager シークレットトークンを保存、取得、更新するときに、シークレットにアクセスする必要があります。 AWS Glue 接続オブジェクトには、Amazon VPC エンドポイントを使用してSnowflakeアカウントへの接続を制限するときに、Amazon VPC ネットワークインターフェイスを作成、説明、使用するためのアクセスも必要です。

   IAM ポリシーを作成し、IAM ロールにアタッチします。信頼ポリシーに AWS Glue サービスプリンシパルを追加します。

   次の例では、`your-secrets-manager-ARN`、、 `your-vpc-id``your-subnet-id1`を独自の情報に置き換えます。  
**Example IAM ポリシー**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue",
                   "secretsmanager:DescribeSecret",
                   "secretsmanager:PutSecretValue"
               ],
               "Resource": [
                   "your-secrets-manager-ARN"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces"
               ],
               "Resource": "*",
               "Condition": {
                   "ArnEquals": {
                       "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/your-vpc-id",
                       "ec2:Subnet": ["arn:aws:ec2:region:account-id:subnet/your-subnet-id1"]
                   }
               }
           }
       ]
   }
   ```  
**Example 信頼ポリシー**  

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

1. <a name="snowflake-step-3"></a>**Lake Formation にカタログの Amazon S3 ロケーションへの読み取りアクセスを許可する IAM ポリシーを作成する**

   Data Catalog のフェデレーティッドカタログのカタログ所有者は、Lake Formation を使用して、データチームへの粗粒度のテーブルアクセス、粒度の細かい列レベル、行レベル、セルレベルのアクセス、タグベースのアクセスを付与します。Lake Formation は、リモート Iceberg テーブルの基盤となる Amazon S3 ロケーションへのアクセスを許可する IAM ロールを使用します。このアクセスにより、Lake Formation はリモートテーブルをクエリする分析エンジンにスコープ付きアクセス認証情報を提供できます。

   IAM ポリシーを作成し、IAM ロールにアタッチします。Lake Formation サービスプリンシパルをロール信頼ポリシーに追加します。

   以下の例では、`amzn-s3-demo-bucketN` と `your-kms-key` を独自の情報に置き換えます。  
**Example IAM ポリシー**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket2/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1",
                   "arn:aws:s3:::amzn-s3-demo-bucket2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:Encrypt"
               ],
               "Resource": [
                   "your-kms-key"
               ]
           }
       ]
   }
   ```  
**Example 信頼ポリシー**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
           "Sid": "",
           "Effect": "Allow",
           "Principal": {
               "Service": "lakeformation.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```
**注記**  
Lake Formation コンソールを使用してフェデレーティッドカタログを作成する場合、コンソールは両方のポリシーがアタッチされた単一の IAM ロールを使用してセットアップを完了します。

1. <a name="snowflake-step-4"></a>** AWS Glue 接続オブジェクトを作成する**

   AWS Glue コネクタは、OAuth2 およびカスタム認証方法をサポートしています。Data Catalog 接続オブジェクトは、リモートカタログ内の小文字または大文字のオブジェクトを Data Catalog に持ち込むことができる`CATALOG_CASING_FILTER`設定をサポートしています。

   次の例では、OAuth2 認証設定を使用して AWS Glue 接続を作成します。`highlighted sections` を自分の情報に置き換えます。

   ```
   aws glue create-connection \
       --connection-input '{
   "Name": "your-glue-connection-to-snowflake-account",
   "ConnectionType": "SNOWFLAKEICEBERGRESTCATALOG",
   "ConnectionProperties": {
       "INSTANCE_URL": "your-snowflake-account-URL",
       "ROLE_ARN": "your-IAM-role-for-secrets-and-VPC-access",
       "CATALOG_CASING_FILTER": "LOWERCASE_ONLY"
   },
   "AuthenticationConfiguration": {
       "AuthenticationType": "OAUTH2",
       "OAuth2Properties": {
           "OAuth2GrantType": "CLIENT_CREDENTIALS",
           "TokenUrl": "your-internal-or-external-token-server-url",
           "OAuth2ClientApplication": {
               "UserManagedClientApplicationClientId": "our-client-id"
           },
           "TokenUrlParametersMap": {
               "scope": "all-apis"
           }
       },
       "SecretArn": "arn:aws:secretsmanager:your-aws-region:your-aws-account-id:secret:snowflake-secret"
   }
   }'
   ```

1. <a name="snowflake-step-5"></a>**Lake Formation リソースとして AWS Glue 接続を登録する**

    AWS Glue 接続オブジェクト (ステップ 4 で作成) と IAM ロール (ステップ 3 で作成) を使用して AWS Glue 、接続オブジェクトを Lake Formation マネージドリソースとして登録できるようになりました。

   `your-glue-connector-arn` と `your-IAM-role-ARN-having-LF-access` をあなたの情報に置き換えます。

   ```
   aws lakeformation register-resource \
       --resource-arn your-glue-connector-arn \
       --role-arn your-IAM-role-ARN-having-LF-access \
       --with-federation \
       --with-privileged-access
   ```

1. <a name="snowflake-step-6"></a>**Data Catalog でフェデレーティッドカタログを作成する**

    AWS Glue 接続オブジェクトを作成して Lake Formation に登録したら、データカタログにフェデレーティッドカタログを作成できます。

   フェデレーティッドカタログに で一意の名前を付け`your-federated-catalog-name`、 Snowflakeで カタログを参照し`catalog-name-in-Snowflake`、 で前に作成した入力接続名を指定します`your-glue-connection-name`。

   ```
   aws glue create-catalog \
       --name your-federated-catalog-name \
       --catalog-input '{
       "FederatedCatalog": {
           "Identifier": catalog-name-in-Snowflake",
           "ConnectionName": your-glue-connection-name"
       },
       "CreateTableDefaultPermissions": [],
       "CreateDatabaseDefaultPermissions": []
   }'
   ```

## と統合する際の考慮事項 Snowflake
<a name="snowflake-considerations"></a>
+ でリソース (データベースやテーブルなど) を削除してもSnowflake、Lake Formation はそのフェデレーティッドリソースに付与されたアクセス許可を自動的に取り消しません。アクセス許可を削除するには、Lake Formation を使用してフェデレーティッドリソースで以前に付与されたアクセス許可を明示的に取り消す必要があります。
+ `CATALOG_CASING_FILTER='UPPERCASE_ONLY'` 設定を使用してリモートカタログをマウントすると、大文字の識別子を持つデータベースとテーブルはフェデレーションされますが、小文字の識別子を持つオブジェクトはフェデレーションされません。
+ 同じ AWS Glue 接続を再利用して、複数のフェデレーティッドカタログを作成できます。カタログを削除しても、関連付けられた接続は削除されません。接続を削除するには、 AWS CLI `aws glue delete-connection` コマンドを使用し、関連するすべてのカタログが最初に削除されていることを確認してください。
+ Polaris カタログ内のネストされた名前空間はサポートされていません。つまり、カタログフェデレーションは、3 つの部分からなる表記 に従うリモートIcebergテーブルにアクセスできます`catalog.database.table`。