

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

# へのデータの取り込み AWS Glue Data Catalog
<a name="bring-your-data-overview"></a>

 AWS Glue Data Catalog (データカタログ) でフェデレーティッドカタログを作成し、Amazon S3 データレイクと Amazon Redshift データウェアハウス間でデータを統合できます。また、 などの運用データベースや、PostgreSQL Amazon DynamoDB、Google BigQuery、MySQL などのサードパーティーデータソースからのデータを統合することもできます。データカタログは、一元化されたメタデータリポジトリを提供し、異種システム間でのデータの管理と発見を容易にします。

データカタログは、フェデレーティッドコネクタを介して 30 個を超える外部データソースと統合されます。この統合により、 AWS データパイプラインを構築して最初にデータを に取り込むことなく、これらの外部ソースからデータをクエリできます。

外部データをカタログ化した後、 AWS Lake Formation を使用して Data Catalog 内のデータアクセス許可を一元管理できます。データレイク管理者は、タグベースのアクセスコントロール (LF タグ) と名前付きリソースメソッドを使用して、同じアカウント内またはアカウント間で、他の IAM プリンシパル (ユーザーまたはロール) にきめ細かなアクセス許可を付与できます。

LF タグを使用すると、データ管理者はドメインや機密性レベルなどの属性に基づいてリソースを論理的に整理できるため、アクセス許可管理を簡素化しながら、Athena、Amazon EMR、 AWS Glue Redshift Spectrum などの分析および機械学習サービス間で一貫したアクセスコントロールを確保できます。

データカタログは、外部データセットと外部メタストアのデータとアクセス許可を管理するために、次の方法を提供します。
+ **Amazon S3 Table バケットを Data Catalog と統合**する – Amazon S3 Tables を Data Catalog オブジェクトとして公開およびカタログ化し、Lake Formation コンソールまたは AWS Glue API オペレーションを使用して、カタログを Lake Formation データの場所として登録できます。
+ **Amazon Redshift データウェアハウスにデータを取り込む – AWS Glue Data Catalog**既存の [Amazon Redshift](https://docs.aws.amazon.com/redshift/index.html) 名前空間またはクラスターをデータカタログに登録し、データカタログにマルチレベルフェデレーティッドカタログを作成します。

  Amazon EMR Serverless や Amazon Athena などの、Apache Iceberg REST カタログ OpenAPI 仕様と互換性のある任意のクエリエンジンを使用してデータにアクセスできます。
+ **リモートIceberg RESTカタログをデータカタログにフェデレーション**する – リモートIceberg RESTカタログをデータカタログにフェデレーションし、 AWS 分析エンジンを使用して Amazon S3 に保存されているリモートIcebergテーブルに安全にアクセスします。
+ **外部データソースから Data Catalog にフェデレーション**する – AWS Glue 接続を使用して Data Catalog を外部データソースに接続し、フェデレーションカタログを作成して Lake Formation を使用してデータセットへのアクセス許可を一元管理します。データカタログへのメタデータの移行は不要です。
+ **データカタログで Amazon Redshift テーブルを管理するカタログを作成する** – 現在、Amazon Redshift プロデューサークラスターや Amazon Redshift データ共有は利用できないが、データカタログで Amazon Redshift テーブルを作成して管理する必要がある場合があります。`glue:CreateCatalog` API オペレーションまたは AWS Lake Formation コンソールを使用して AWS Glue マネージドカタログを作成し、カタログタイプを `Managed` とし、`Catalog source` を **Redshift** と設定することで開始できます。
+ **Amazon Redshift データ共有をデータカタログで公開する** – [Amazon Redshift](https://docs.aws.amazon.com/redshift/index.html) データ共有をデータカタログに公開し、Lake Formation を使用してデータ共有のデータアクセスを一元管理し、ユーザーアクセスを制限します。

  Amazon Redshift Spectrum を使用したデータのクエリ 
+  **データカタログを外部 Hive メタストアに接続する** - データカタログを外部メタストアに接続し、Lake Formation を使用して Amazon S3 のデータセットに対するアクセス許可を管理します。データカタログへのメタデータの移行は不要です。
+ **Lake Formation と AWS Data Exchange の統合** – Lake Formation は、 を介したデータへのアクセスのライセンスをサポートしています AWS Data Exchange。Lake Formation データのライセンスを付与する場合は、「*AWS Data Exchange ユーザーガイド*の「[AWS Data Exchangeとは](https://docs.aws.amazon.com/data-exchange/latest/userguide/what-is.html)」を参照してください。

**Topics**
+ [リモート Iceberg カタログへのカタログフェデレーション](catalog-federation.md)
+ [Amazon Redshift データを に取り込む AWS Glue Data Catalog](managing-namespaces-datacatalog.md)
+ [の外部データソースへのフェデレーション AWS Glue Data Catalog](federated-catalog-data-connection.md)
+ [Amazon S3 Tables と AWS Glue Data Catalog および の統合 AWS Lake Formation](create-s3-tables-catalog.md)
+ [S3 Tables 統合のアクセスコントロールの変更](manage-s3tables-catalog-integration.md)
+ [での Amazon Redshift マネージドカタログの作成 AWS Glue Data Catalog](create-rms-catalog.md)
+ [Amazon Redshift データ共有でのデータに対するアクセス許可の管理](data-sharing-redshift.md)
+ [外部メタストアを使用するデータセットのアクセス許可の管理](data-sharing-hms.md)

# リモート Iceberg カタログへのカタログフェデレーション
<a name="catalog-federation"></a>

のカタログフェデレーション AWS Glue は、 AWS 分析エンジンを使用して、Amazon S3 に保存され、リモートカタログにカタログ化された Iceberg テーブルへの直接かつ安全なアクセスを提供します。カタログフェデレーションは、リモートテーブルにアクセスするときに、データカタログとリモートカタログ間でメタデータを同期します。Amazon Redshift、Amazon EMR、Amazon Athena、Apache Spark などのサードパーティーエンジンなど AWS Glue、さまざまな分析エンジンでサポートされています。

カタログフェデレーションは AWS Glue Data Catalog 、 を使用してリモートカタログシステムと通信してテーブルを検出し、Lake Formation を使用して Amazon S3 のテーブルデータへのアクセスを許可します。フェデレーティッドテーブルをクエリすると、Data Catalog はクエリ時にリモートカタログ内の最新のテーブル情報を検出し、テーブルの Amazon S3 の場所、現在のスキーマ、パーティション情報を取得します。その後、分析エンジン (Amazon Athena、Amazon Redshift、Amazon EMR) はこの情報を使用してAmazon S3から直接 Iceberg データファイルにアクセスします。Lake Formation は、Amazon S3 に保存されているテーブルデータにスコープ付き認証情報を提供することでテーブル (複数可) へのアクセスを管理し、エンジンがフェデレーティッドテーブル (複数可) にきめ細かなアクセス許可を適用できるようにします。

## カタログフェデレーションの機能
<a name="catalog-federation-features"></a>

**Lake Formation を使用して管理**  
Data Catalog のフェデレーティッド Iceberg カタログは Lake Formation 登録リソースであり、Lake Formation 許可を使用してフェデレーティッド Iceberg カタログの Iceberg テーブルにきめ細かな行、列、セルレベルのアクセス許可を付与できます。フェデレーティッド Iceberg カタログと関連オブジェクトは、 AWS アカウント間で安全に共有できます。フェデレーティッド Iceberg カタログは Lake Formation タグベースのアクセスコントロールとも連携するため、タグを使用してガバナンスをスケーリングできます。

**ネットワーク設定**  
カタログフェデレーションは、標準の HTTPS 接続を使用したリモートカタログソースへの直接接続をサポートします。また、ネットワークの分離を維持する場合は Amazon VPC を介した接続をサポートし、組織のファイアウォールを介した安全な通信が必要な場合はプロキシサポートを使用した接続もサポートします。

**Topics**
+ [カタログフェデレーションの機能](#catalog-federation-features)
+ [Snowflake Iceberg Catalog へのフェデレーション](catalog-federation-snowflake.md)
+ [へのフェデレーション Databricks Unity Catalog](catalog-federation-databricks.md)

# 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`。

# へのフェデレーション Databricks Unity Catalog
<a name="catalog-federation-databricks"></a>

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

次に、カタログフェデレーションにより、Databricks Unity Catalog 内のIcebergテーブルの検出とクエリが可能になります。デルタテーブルを読み取るには、 を使用してこれらのテーブルでIcebergメタデータが使用可能であることを確認してくださいUniform。Databricks チュートリアルとドキュメントに従って、Databricksワークスペースにサービスプリンシパルと関連する権限を作成します。

## 前提条件
<a name="catalog-federation-databricks-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-databricks-create"></a>

### コンソールの使用
<a name="catalog-federation-databricks-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. **データソースの選択**ステップで、使用可能なオプションDatabricksから を選択します。

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

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

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

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

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

1. 接続のテストを選択して、接続プロパティと IAM ロールアクセスが正しく設定されているかどうかをテストします。Amazon VPC Databricksを使用して に接続する場合、テスト接続機能は利用できません。

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

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

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

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

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

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

   ```
   aws secretsmanager create-secret \
   --name <databricks-secret> \
   --description "Databricks 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="databricks-step-2"></a>**前のステップで作成したシークレットへのアクセスを AWS Glue 接続オブジェクトに許可する IAM ロールを作成する**

    AWS Glue 接続オブジェクトでは、 AWS Secrets Manager を使用して OAuth AWS Secrets Manager シークレットトークンを保存、取得、更新するときに、シークレットにアクセスする必要があります。 AWS Glue 接続オブジェクトには、Amazon VPC エンドポイントを使用してDatabricksワークスペースへの接続を制限するときに、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="databricks-step-3"></a>**Lake Formation にカタログの Amazon S3 ロケーションへの読み取りアクセスを許可する IAM ポリシーを作成する**

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

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

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

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::<your-s3-bucket-1>/*",
                   "arn:aws:s3:::<your-s3-bucket-2>/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::<your-s3-bucket-1>",
                   "arn:aws:s3:::<your-s3-bucket-2>"
               ]
           },
           {
               "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="databricks-step-4"></a>** AWS Glue 接続オブジェクトを作成する**

   Data Catalog は、Data Catalog を に接続`DATABRICKSICEBERGRESTCATALOG`するための connectionType: をサポートしていますDatabricks。この AWS Glue コネクタは、OAuth2 およびカスタム認証方法をサポートしています。

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

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

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

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

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

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

## と統合する際の考慮事項 Databricks
<a name="databricks-considerations"></a>
+ でリソース (データベースやテーブルなど) を削除してもDatabricks、Lake Formation はそのフェデレーティッドリソースに付与されたアクセス許可を自動的に取り消しません。アクセス許可を削除するには、Lake Formation を使用してフェデレーティッドリソースで以前に付与されたアクセス許可を明示的に取り消す必要があります。
+ この統合を使用して、Amazon S3 に保存されている Iceberg テーブルをクエリできます。他のテーブル形式またはオブジェクトストレージを使用する場合、リモートカタログのメタデータを にフェデレーション AWS Glue してデータベースとテーブルを一覧表示できますが、 のようなクエリオペレーション`SELECT ColumnFoo from TableBar`はクエリ中に失敗し、Apache Iceberg「テーブルの読み取りに失敗しました」というエラーが発生します。オブジェクトストレージの場所はサポートされていません。
+ 同じ AWS Glue 接続を再利用して、複数のフェデレーティッドカタログを作成できます。カタログを削除しても、関連付けられた接続オブジェクトは削除されません。接続オブジェクトを削除するには、 AWS CLI `aws glue delete-connection` コマンドを使用して、関連するすべてのカタログが最初に削除されていることを確認してください。

# Amazon Redshift データを に取り込む AWS Glue Data Catalog
<a name="managing-namespaces-datacatalog"></a>

 AWS Glue Data Catalog (データカタログ) の Amazon Redshift データウェアハウスで分析データを管理し、Amazon S3 データレイクと Amazon Redshift データウェアハウスを統合できます。Amazon Redshift は、 AWS クラウドにおけるフルマネージド型のペタバイト規模のデータウェアハウスサービスです。Amazon Redshift データウェアハウスは、*ノード*と呼ばれるコンピューティングリソースの集合で、*クラスター*と呼ばれるグループに編成されています。各クラスターは Amazon Redshift エンジンを実行し、1 つ以上のデータベースを含みます。

Amazon Redshift では、Amazon Redshift でプロビジョニングされたクラスターとサーバーレス名前空間を作成し、データカタログに登録できます。これにより、Amazon Redshift マネージドストレージ (RMS) と Amazon S3 バケットのデータを統合し、Apache Iceberg 互換の分析エンジンからデータにアクセスできるようになります。

名前空間とクラスターを登録することで、データをコピーまたは移動することなく、データへのアクセスを提供できます。Amazon Redshift でのクラスターと名前空間の登録の詳細については、「[Amazon Redshift のクラスターや名前空間の AWS Glue Data Catalogへの登録](https://docs.aws.amazon.com/redshift/latest/dg/iceberg-integration-register.html)」を参照してください。

 Amazon Redshift では、データ共有を通じて、または名前空間とクラスターをデータカタログに登録することで、データ共有を実行できます。個々のデータベースオブジェクトレベルで動作するデータ共有では、テーブルまたはビューごとに共有を有効にする必要があります。これとは対照的に、名前空間はクラスターまたは名前空間レベルで関数を発行します。クラスターまたは名前空間をデータカタログに登録すると、その中のすべてのデータベースとテーブルが自動的に共有されます。個々のオブジェクトの共有を設定する必要はありません。

データカタログでは、名前空間またはクラスターごとにフェデレーティッドカタログを作成できます。データカタログ外のエンティティを指す場合、カタログは*フェデレーティッドカタログ*と呼ばれます。Amazon Redshift 名前空間のテーブルとビューは、データカタログに個別のテーブルとして表示されます。フェデレーティッドデータベースは、同じアカウント内または Lake Formation の別のアカウント内の、選択した IAM プリンシパルおよび SAML ユーザーと共有できます。行と列のフィルター式を含めて、特定データへのアクセスを制限することもできます。詳細については、「[Lake Formation でのデータフィルタリングとセルレベルのセキュリティ](data-filtering.md)」を参照してください。

データカタログは、カタログ、データベース、テーブル (およびビュー) で構成される 3 レベルのメタデータ階層をサポートします。名前空間をデータカタログに登録すると、Amazon Redshift データ階層は次のようにデータカタログの 3 レベルの階層にマッピングされます。
+ Amazon Redshift 名前空間は、データカタログのマルチレベルカタログになります。
+ 関連付けられた Amazon Redshift データベースは、データカタログにカタログとして登録されます。
+ Amazon Redshift スキーマは、データカタログ内のデータベースになります。
+ Amazon Redshift テーブルは、データカタログ内のテーブルになります。

![\[Amazon Redshift 名前空間とデータカタログ間のカタログレベルのマッピングを表示します。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/rs-catalog-mapping.png)


この 3 レベルのメタデータ階層では、データカタログの「catalog1/catalog2.database.table」という 3 つの部分からなる表記を使用して Amazon Redshift テーブルにアクセスできます。また、データチームは、Amazon Redshift が データカタログアカウント内のテーブルを整理するために使用するのと同じ組織を維持できます。

Lake Formation では、データカタログリソースのきめ細かなアクセスコントロールを使用して、Amazon Redshift からのデータを安全に管理できます。この統合により、共通のアクセスコントロールメカニズムを使用して、単一のカタログから分析データを管理、保護、クエリできます。

制限事項については、「[Amazon Redshift データウェアハウスデータを に取り込む際の制限 AWS Glue Data Catalog](notes-ns-catalog.md)」を参照してください。

**Topics**
+ [主な利点](#namespace-publish-benefits)
+ [役割と責任](#namespace-roles-responsibilities)
+ [で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)
+ [Amazon Redshift フェデレーティッドカタログの作成](create-ns-catalog.md)
+ [カタログオブジェクトの表示](view-ns-catalog-resources.md)
+ [フェデレーティッドカタログの更新](update-fed-catalog-steps.md)
+ [共有フェデレーティッドカタログへのアクセス](catalog-resource-link.md)
+ [フェデレーティッドカタログの削除](delete-rs-fed-catalog.md)
+ [フェデレーティッドカタログのクエリ](query-redshift-fed-catalog.md)
+ [その他のリソース](additional-resources-byod.md)

## 主な利点
<a name="namespace-publish-benefits"></a>

 Amazon Redshift クラスターと名前空間を に登録 AWS Glue Data Catalog し、Amazon S3 データレイクと Amazon Redshift データウェアハウス間でデータを統合することで、次の利点が得られます。
+ **統一されたクエリエクスペリエンス** – データを移動したりコピーしたりせずに、Amazon EMR Serverless や Amazon Athena など、Apache Iceberg と互換性のある任意のクエリエンジンを使用して、Amazon Redshift マネージドデータとAmazon S3 バケット内のデータをクエリします。
+ **サービス間の一貫したデータアクセス** – データソースが Data Catalog に登録されているため、異なる AWS 分析サービスから同じフェデレーティッドデータソースにアクセスするときに、データパイプラインのデータベース名とテーブル名を更新する必要はありません。
+ **きめ細かなアクセスコントロール **– Lake Formation のアクセス許可を適用して、きめ細かなアクセスコントロールのアクセス許可を使用してフェデレーティッドデータソースへのアクセスを管理できます。

## 役割と責任
<a name="namespace-roles-responsibilities"></a>


|  |  | 
| --- |--- |
| ロール  | 責任 | 
|  Amazon Redshift プロデューサークラスター管理者  |  クラスターまたは名前空間をデータカタログに登録します。  | 
| Lake Formation データレイク管理者  |  クラスターまたは名前空間の招待を受け入れ、フェデレーティッドカタログを作成し、フェデレーティッドカタログへのアクセスを他のプリンシパルに付与します。  | 
| Lake Formation 読み取り専用管理者 | フェデレーティッドカタログを検出し、フェデレーティッドカタログ内の Amazon Redshift テーブルをクエリします。 | 
| データ転送ロール  |  Amazon Redshift は、ユーザーに代わって Amazon S3 バケットとの間でデータを転送します。  | 

以下は、Amazon Redshift 名前空間へのアクセスをユーザーに許可するための大まかな手順です。

1.  Amazon Redshift では、プロデューサークラスター管理者はクラスターまたは名前空間をデータカタログに登録します。

1. データレイク管理者は、Amazon Redshift プロデューサークラスター管理者からの名前空間の招待を受け入れ、データカタログにフェデレーティッドカタログを作成します。

   この手順を完了すると、データカタログ内で Amazon Redshift 名前空間カタログを管理できます。

1. カタログ、データベース、テーブルに対するアクセス許可をユーザーに付与します。名前空間カタログ全体またはテーブルのサブセットを、同じアカウント内または別のアカウント内のユーザーと共有できます。

# で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog
<a name="redshift-ns-prereqs"></a>

1. データレイク管理者の作成 - 名前空間の招待を受け入れる権限を持つ IAM ロールを作成し、 AWS Glue Data Catalog オブジェクト (カタログ、データベース、テーブル/ビュー) を作成し、他のユーザーに Lake Formation アクセス許可を付与します。

   データレイク管理者を作成するための詳しい手順については、「[データレイク管理者を作成する](initial-lf-config.md#create-data-lake-admin)」を参照してください。

1. データレイク管理者アクセス許可を更新します。

    データレイク管理者のアクセス許可に加えて、データレイク管理者は、Lake Formation で Amazon Redshift 名前空間の招待を受け入れ、データカタログリソースを作成または更新し、データレイクアクセスを有効にするために、次のアクセス許可が必要です。

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

****  

   ```
       {
       "Version":"2012-10-17",		 	 	 
       "Id": "glue-enable-datalake-access",
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "redshift:AssociateDataShareConsumer",
                   "redshift:DescribeDataSharesForConsumer",
                   "redshift:DescribeDataShares",
                   "redshift-serverless:CreateNamespace",
                   "redshift-serverless:CreateWorkgroup",
                   "redshift-serverless:DeleteNamespace",
                   "redshift-serverless:DeleteWorkgroup",
                   "ec2:DescribeAccountAttributes",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeSecurityGroups",
                   "ec2:DescribeAvailabilityZones",
                   "s3:createBucket",
                   "s3:deleteBucket",
                   "s3:putBucketPolicy",
                   "s3:putEncryptionConfiguration",
                   "s3:putLifecycleConfiguration",
                   "s3:putBucketVersioning",
                   "iam:CreateRole"
               ],
               "Resource": "*"
           },
           {
               "Action": [
                   "iam:PassRole"
               ],
               "Effect": "Allow",
               "Resource": "arn:aws:iam::*:role/data transfer role name",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": [
                           "glue.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. フェデレーティッドカタログの作成に使用される IAM ロールがデータレイク管理者でない場合は、ロールに `Create catalog` アクセス許可を付与する必要があります。

**カタログ作成者を作成するには**

   1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

   1. ナビゲーションペインの **[管理]** で、**[管理ロールとタスク]** を選択します。

   1. **[付与]** を選択します。

   1. **[アクセス許可の付与]** 画面で、IAM ユーザーとロールを選択します。

   1. **[カタログ作成]** のアクセス許可を選択します。

   1. 必要に応じて、付与可能な **[カタログ作成]** アクセス許可を付与することもできます。付与可能なアクセス許可により、カタログ作成者は他のプリンシパルに `Create catalog` アクセス許可を付与できます。

   1. **[付与]** を選択します。

   AWS CLI フェデレーティッドカタログを作成するアクセス許可を付与する の例。

   ```
   aws lakeformation grant-permissions \
   --cli-input-json \
   '{
       "Principal": {
        "DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin"
       },
       "Resource": {
           "Catalog": {
           }
       },
       "Permissions": [
           "CREATE_CATALOG",
           "DESCRIBE"
       ]
   }'
   ```

1. 読み取り専用管理者ロールを作成して、Amazon Redshift Query Editor V2 からデータカタログ内の Amazon Redshift フェデレーティッドカタログを検出します。

   Amazon Redshift Query Editor V2 からフェデレーティッドカタログ内の Amazon Redshift テーブルをクエリするには、読み取り専用管理者ロールポリシーに、Amazon Redshift サービスにリンクされたロール `AWSServiceRoleForRedshift` の ARN が含まれていることを確認します。

   ```
    aws lakeformation put-data-lake-settings 
           --region us-east-1 \
           --data-lake-settings \
    '{
      "DataLakeAdmins": [{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin"}],
      "ReadOnlyAdmins":[{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"}],
      "CreateDatabaseDefaultPermissions":[],
      "CreateTableDefaultPermissions":[],
      "Parameters":{"CROSS_ACCOUNT_VERSION":"4","SET_CONTEXT":"TRUE"}
     }'
   ```

1.  ユーザーに代わって Amazon S3 バケットとの間でデータを転送するために Amazon Redshift が引き受けることができるデータ転送ロールを作成します。

   Athena、Amazon EC2 での Amazon EMR などの Apache Iceberg 互換クエリエンジンのデータレイクアクセスを有効にしてデータカタログ内の Amazon Redshift リソースにアクセスする場合は、Amazon S3 バケットとの間でデータ転送を実行するために必要なアクセス許可を持つ IAM ロールを作成する必要があります。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "glue-enable-datalake-access",
       "Statement": [{
         "Sid": "DataTransferRolePolicy",
           "Effect": "Allow",
           "Action": [ "glue:GetCatalog",
                       "glue:GetDatabase",
                       "kms:GenerateDataKey",
                       "kms:Decrypt"],
           "Resource": "*"
       }
       ]
   }
   ```

------

1.  AWS Glue および Amazon Redshift サービスのデータ転送ロールに次の信頼ポリシーを追加して、Amazon S3 バケットとの間でデータを転送するためのロールを引き受けます。

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

****  

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

------

1.  カスタマーマネージドキーを使用して Amazon Redshift クラスター/名前空間内のデータを暗号化 AWS KMS する場合は、次のキーポリシーをキーに追加します。アカウント番号を有効な AWS アカウント番号に置き換え、データ転送ロール名を指定します。デフォルトでは、Amazon Redshift クラスターのデータは、KMS キーを使用して暗号化されます。Lake Formation には、暗号化用のカスタム KMS キーを作成するオプションがあります。カスタマーマネージドキーを使用している場合は、特定のキーポリシーをキーに追加する必要があります。

   カスタマーマネージドキーの許可を管理する方法の詳細については、[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を参照してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "auto-redshift-3",
       "Statement": [{
               "Sid": "RedshiftAllowAccessPolicy",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "kms:CallerAccount": "111122223333",
                       "kms:ViaService": "redshift.us-east-1.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "RedshiftServerlessAllowAccessPolicy",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "kms:CallerAccount": "111122223333",
                       "kms:ViaService": "redshift-serverless.us-east-1.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "DirectMetadataAccess",
               "Effect": "Allow",
               "Principal": {
               "AWS": "arn:aws:iam::111122223333:root"
               },
               "Action": [
                   "kms:Describe*",
                   "kms:Get*",
                   "kms:List*",
                   "kms:RevokeGrant"
               ],
               "Resource": "*"
           },
           {
               "Sid": "GenerateDataKeyDecryptDataTransferRole",
               "Effect": "Allow",
               "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/data-transfer-role-name"
               },
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                   "kms:ViaService": "s3.us-east-1.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

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

このトピックでは、クラスターまたは名前空間の招待を受け入れ、フェデレーティッドマルチレベルカタログを作成し、他のプリンシパルにアクセス許可を付与するために必要な手順について説明します。これらのタスクは、Lake Formation コンソール、 AWS Command Line Interface (AWS CLI)、または APIs/SDKs。このトピックの例では、同じアカウント内のプロデューサークラスター/名前空間、データカタログ、およびデータコンシューマーを示しています。

Lake Formation のクロスアカウント機能の詳細については、「[Lake Formation でのクロスアカウントデータ共有](cross-account-permissions.md)」を参照してください。

**データカタログで Amazon Redshift 名前空間を管理するには**

1. 名前空間への招待を確認して承諾します。

------
#### [ Console ]

   1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にデータレイク管理者としてサインインします。**[データカタログ]** の **[カタログ]** ページに移動します。

   1. アクセスが許可されている名前空間の招待を確認します。**[ステータス]** 列は、名前空間の現在の参加ステータスを示します。**[未承諾]** ステータスは、名前空間に追加されたものの、まだ承諾していないか招待を拒否したことを示します。  
![\[保留中の招待を含むカタログページ。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/catalog-details.png)

   1. 名前空間またはクラスターの招待に応答するには、招待名を選択し、**[招待の確認]** を選択します。**[招待の承諾または拒否]** で、招待の詳細を確認します。**[Accept]** (承諾) を選択して招待を承諾するか、**[Reject]** (拒否) を選択して招待を却下します。招待を拒否した場合、名前空間にはアクセスできません。

------
#### [ AWS CLI ]

   以下の例では、招待を表示、承諾、登録する方法を示します。 AWS アカウント ID を有効な AWS アカウント ID に置き換えます。`data-share-arn` を、名前空間を参照する実際の Amazon リソースネーム (ARN) に置き換えます。

   1. 保留中の招待を確認します。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \
      ```

   1. 招待を承諾します。

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \
       --consumer-arn 'arn:aws:glue:us-east-1:123456789012:catalog'
      ```

   1. Lake Formation アカウントにクラスターまたは名前空間を登録します。[RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API オペレーションを使用して、データ共有を Lake Formation に登録します。`DataShareArn` は `ResourceArn` の入力パラメータです。
**注記**  
これは必須の手順です。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace'
      ```

------

1. フェデレーティッドカタログを作成します。

    招待を承諾したら、Amazon Redshift 名前空間内のオブジェクトをデータカタログにマッピングするフェデレーティッドカタログをデータカタログに作成する必要があります。データレイク管理者、またはカタログの作成に必要なアクセス許可を持つユーザーもしくはロールである必要があります。

------
#### [ Console ]

   1. 名前空間の**[招待]**を受け入れると、**[カタログの詳細の設定]** ページが表示されます。

   1. **[カタログの詳細の設定]** ページで、カタログの一意の名前を入力します。カタログ名には小文字を使用します。カタログ名は 255 文字以下にする必要があります。この識別子を使用して、名前空間の内部をメタデータ階層 (catalogid.dbName.schema.table) にマッピングします。

   1.  キーの説明を入力します。説明は 2,048 文字以下にする必要があります。

   1. 次に、**[Iceberg 互換エンジンからこのカタログにアクセスする]** チェックボックスにチェックを入れると、Athena や Amazon EMR での Apache Spark のような Apache Iceberg 互換の分析エンジンを使用して、Amazon Redshift リソースにアクセスできるようになります。

      Amazon Redshift を使用してフェデレーティッドカタログにアクセスするためにデータレイクのアクセスを有効にする必要はありません。  
![\[アクセス有効化オプションを含むカタログの作成ページ。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/catalog-access.png)

   1. これらのクエリエンジンが Amazon Redshift 名前空間に読み書きできるようにするには、Amazon Redshift データウェアハウスのワークロードに影響を与えることなく、読み取りおよび書き込みオペレーションを実行するために必要なコンピューティングリソースとストレージリソースを備えたマネージド Amazon Redshift クラスター AWS Glue を作成します。

      Amazon S3 バケットとの間でデータを転送するために必要なアクセス許可を持つ IAM ロールも指定する必要があります。

   1. デフォルトでは、Amazon Redshift クラスター内のデータは AWS マネージドキーを使用して暗号化されます。Lake Formation には、暗号化用のカスタム KMS キーを作成するオプションがあります。カスタマーマネージドキーを使用している場合は、特定のキーポリシーをキーに追加する必要があります。

       カスタマーマネージドキーを使用して Amazon Redshift クラスター/名前空間のデータを暗号化している場合は、**[暗号化設定のカスタマイズ]** を選択します。カスタムキーを使用するには、KMS キーにカスタムマネージドキーポリシーを追加する必要があります。詳細については、「[で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)」を参照してください。

------
#### [ AWS CLI ]

    次のサンプルコードを使用し、 AWS CLIを使用してデータカタログに公開された Amazon Redshift データを含むカタログを作成します。

   ```
   aws glue create-catalog 
   --cli-input-json \
   '{
       "Name": "nscatalog", 
       "CatalogInput": {
           "Description": "Redshift federated catalog",
           "CreateDatabaseDefaultPermissions" : [],
           "CreateTableDefaultPermissions": [],
           "FederatedCatalog": {
               "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:11524d7f-f56d-45fe-83f7-d7bb0a4d6d71/ds_internal_namespace",
               "ConnectionName": "aws:redshift"
           },
           "CatalogProperties": {
             "DataLakeAccessProperties" : {
               "DataLakeAccess" : true,
               "DataTransferRole" : "arn:aws:iam::123456789012:role/DataTransferRole"
            } 
          }
       }
   }'
   ```

------

1. 自分のアカウントまたは外部アカウントのユーザーに許可を付与します。

------
#### [ AWS マネジメントコンソール ]

   1. 共有のカタログ、データベース、テーブルに対するアクセス許可を他のユーザーに付与するには、**[次へ]** を選択します。

   1.  **[アクセス許可を追加]** 画面で、プリンシパルと、付与するアクセス許可のタイプを選択します。  
![\[プリンシパルタイプと許可オプションを含むカタログアクセス許可ページ。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/catalog-permissions.png)

      1.  **[Principals]** (プリンシパル) セクションでプリンシパルタイプを選択してから、アクセス許可の付与先となるプリンシパルを指定します。
         + **IAM ユーザーとロール** – IAM ユーザーとロールのリストから、ユーザーまたはロールを 1 つ以上選択します。
         + ** SAML ユーザーとグループ** – SAML および Amazon Quick ユーザーとグループの場合は、SAML を介してフェデレーションされたユーザーまたはグループの 1 つ以上の Amazon リソースネーム (ARNs)、または Amazon Quick ユーザーまたはグループの ARNs を入力します。各 ARN の後で **[Enter]** キーを押します。

           ARNs」を参照してください。 AWS CLI AWS CLI 
         + **外部アカウント** – AWS、 AWS 組織、または IAM プリンシパルには、IAM ユーザーまたはロールの 1 つ以上の有効な AWS アカウント IDs、組織 IDs、組織単位 IDs、または ARN を入力します。各 ID の後で [Enter] キーを押します。組織 ID は、最初の「o-」と、その後に続く 10～32 個の小文字または数字で構成されています。組織単位 ID は「ou-」で始まり、その後に 4～32 個の小文字または数字 (OU が含まれるルートの ID) が続きます。この文字列の後には、2 番目の「-」ダッシュと 8～32 個の追加の小文字または数字が続きます。

      1.  **[Permissions]** (許可) セクションで、許可と付与可能な許可を選択します。

         **[カタログのアクセス許可]** で、付与するアクセス許可を 1 つ以上選択します。**付与可能なアクセス**許可で、付与受信者が AWS アカウントの他のプリンシパルに付与できるアクセス許可を選択します。このオプションは、外部アカウントから IAM プリンシパルにアクセス許可を付与する場合はサポートされません。

         **[スーパーユーザー]** を選択して、カタログ内のリソース (データベース、テーブル、ビュー) に対する無制限のアクセス許可をユーザーに付与します。

   1. **[Add]** (追加) を選択します。

------
#### [ AWS CLI ]

   以下の例を使用して、 AWS CLIでカタログ、データベース、テーブルのアクセス許可を付与します。
   + 次の例は、フェデレーティッドカタログに対するアクセス許可を付与する方法を示しています。

     ```
     aws lakeformation grant-permissions
      --cli-input-cli-json \
        '{
              "Principal": {
                   "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
               },
               "Resource": {
                    "Catalog": {
                          "Id": "123456789012:nscatalog"
                     }
                 },
                 "Permissions": [
                        "DESCRIBE","CREATE_CATALOG"
                  ],
                 "PermissionsWithGrantOption": [
                  ]
         }'
     ```
   + 次の例を使用して、データベースに対するアクセス許可を付与します。

     ```
     aws lakeformation grant-permissions \
       --cli-input-json \
               '{
                   "Principal": {
                       "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
                   },
                   "Resource": {
                       "Database": {
                           "CatalogId": "123456789012:nscatalog/dev",
                           "Name": "public"
                       }
                   },
                   "Permissions": [
                       "ALL"
                   ]
               }'
     ```
   +  次の例は、Amazon Redshift データベースのテーブルに対するアクセス許可を付与する方法を示しています。

     ```
     aws lakeformation grant-permissions \
       --cli-input-json \
             '{
                 "Principal": {
                     "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
                 },
                 "Resource": {
                     "Table": {
                         "CatalogId": "123456789012:nscatalog2/dev",
                         "DatabaseName": "public",
                         "TableWildcard" : {}
                     }
                 },
                 "Permissions": [
                     "ALL"
                 ]
             }'
     ```

------

1. **[次へ]** を選択してカタログの詳細を確認し、フェデレーティッドカタログを作成します。新しく作成されたフェデレーティッドカタログとカタログオブジェクトが**[カタログ]** ページに表示されます。

   Amazon Redshift フェデレーティッドカタログを参照するには `catalogID = 123456789012:Redshift-federated catalog id` を使用します。

# カタログオブジェクトの表示
<a name="view-ns-catalog-resources"></a>

 フェデレーティッドカタログを作成したら、Lake Formation コンソールまたは AWS CLIを使用してカタログ内のオブジェクトを表示できます。

------
#### [ AWS マネジメントコンソール ]

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

1. [データカタログ] で **[カタログ]** を選択します。

1. **[カタログ]** ページのリストからフェデレーティッドカタログを選択します。

1.  カタログの概要ページには、アクセス許可があるカタログオブジェクト (データベースとテーブル) が表示されます。**[アクセス許可]** タブには、これらのオブジェクトに対するアクセス許可が付与された IAM プリンシパルが表示されます。

------
#### [ AWS CLI ]
+ 次の AWS CLI 例は、最上位カタログをリクエストする方法を示しています。

  ```
  aws glue get-catalog \
  --catalog-id 123456789012:nscatalog
  ```

  *レスポンス*

  ```
  {
      "Catalog": {
          "CatalogId": "123456789012:nscatalog",
          "Name": "nscatalog",
          "ResourceArn": "arn:aws:glue:us-east-1:123456789012:catalog/nscatalog",
          "Description": "Redshift published Catalog",
          "CreateTime": "2024-09-05T14:49:16-07:00",
          "FederatedCatalog": {
              "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:b1234589-e823-4a14-ad8e-077085540a50/ds_internal_namespace",
              "ConnectionName": "aws:redshift"
          },
          "CatalogProperties": {
              "DataLakeAccessProperties": {
                  "DataLakeAccess": true,
                  "DataTransferRole": "arn:aws:iam::123456789012:role/DataTransferRole",
                  "KmsKey": "AWS_OWNED_KMS_KEY",
                  "ManagedWorkgroupName": "123456789012:nscatalog",
                  "ManagedWorkgroupStatus": "AVAILABLE",
                  "RedshiftDatabaseName": "dev"
              }
          },
          "CatalogIdentifier": "e2309c2c2fb048f1a3069dfdc1c7883e",
          "CreateTableDefaultPermissions": [],
          "CreateDatabaseDefaultPermissions": []
      }
  }
  ```
+ 次の例は、アカウント内のすべてのカタログをリクエストする方法を示しています。

  ```
  aws glue get-catalogs \
    --recursive
  ```
+ 次のリクエスト例は、Amazon Redshift データベースレベルのカタログを取得する方法を示しています。

  ```
  aws glue get-catlog \
   --catalog-id 123456789012:namespace catalog name/redshift database name
  ```
+ 次のリクエスト例は、Amazon Redshift データベースレベルのカタログでデータベースを取得する方法を示しています。

  ```
  aws glue get-databases \
  --catalog-id 123456789012:namespace catalog name/redshift database name
  ```
+  次のリクエスト例は、カタログで Amazon Redshift テーブルを取得する方法を示しています。

  ```
  aws glue get-table \
    --catalog-id 123456789012:parent catalog name/redshift database \
    --database-name redshift schema name \
    --name table name
  ```
+  次の例は、Amazon Redshift データベースからテーブルを取得する方法を示しています。

  ```
  aws glue get-tables \
   --catalog-id 123456789012:namespace catalog name/redshift database name \
   --database-name RS schema name
  ```

------

# フェデレーティッドカタログの更新
<a name="update-fed-catalog-steps"></a>

Lake Formation コンソール、、 AWS CLI または [UpdateCatalog](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateCatalog.html) API オペレーションを使用して、データカタログで Amazon Redshift フェデレーティッドカタログを更新できます。

------
#### [ AWS マネジメントコンソール ]

Lake Formation コンソールを使用してフェデレーティッドカタログを更新するには、次の手順に従います。

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

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

1. **[カタログ]** ページで、更新する Amazon Redshift フェデレーティッドカタログを選択します。

1. **[アクション]** で **[編集]** を選択します。

1. **[カタログの詳細の設定]** 画面の **[エンジンからアクセス]** セクションで、**[Iceberg 互換エンジンからこのカタログにアクセスする]** を選択します。このオプションにチェックを入れると、Apache Iceberg 互換クエリエンジンのデータレイクアクセスが有効になります。

1. 次に、新しい IAM ロールを作成するか、Amazon S3 バケットとの間でデータ転送を実行するアクセス許可を付与するポリシーを持つ既存の IAM ロールを選択します。

   アクセス許可の詳細については、「[で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)」を参照してください。

1. デフォルトでは、Amazon Redshift クラスターのデータは、 AWS マネージドキーを使用して暗号化されます。カスタマーマネージドキーを使用してデータを暗号化する場合は、KMS キーを作成するか、[で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog](redshift-ns-prereqs.md) セクションで定義されたアクセス許可を持つ既存のキーを選択します。

1. **[保存]** を選択します。

   正常に完了すると、**[カタログの詳細]** ページに、ステータスが「成功」であるマネージドワークグループ名が表示されます。

------
#### [ AWS CLI ]

`DataLakeAacess` パラメータ値を `false` に設定して、データレイクアクセスを無効にした `update-catalog` CLI 入力の例を次に示します。

```
aws glue update-catalog  --cli-input-json \
'{
    "Name": "nscatalog", 
    "CatalogInput": {
        "Description": "Redshift published catalog",
        "CreateDatabaseDefaultPermissions" : [],
        "CreateTableDefaultPermissions": [],
        "FederatedCatalog": {
            "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:11524d7f-f56d-45fe-83f7-d7bb0a4d6d71/ds_internal_namespace",
            "ConnectionName": "aws:redshift"
        },
        "CatalogProperties": {
          "DataLakeAccessProperties" : {
            "DataLakeAccess" : false
        } 
       }
    }
}'
```

------

# 共有フェデレーティッドカタログへのアクセス
<a name="catalog-resource-link"></a>

 AWS Lake Formation クロスアカウント機能を使用すると、ユーザーは分散データレイクを複数の AWS アカウント、 AWS 組織間で安全に共有したり、別のアカウントの IAM プリンシパルと直接共有して、メタデータや基盤となるデータにきめ細かなアクセスを提供したりできます。

Lake Formation は AWS Resource Access Manager 、 (AWS RAM) サービスを使用してリソース共有を容易にします。カタログリソースを別のアカウントと共有すると、 は、リソース許可を承認または拒否するための招待を被付与者アカウント AWS RAM に送信します。

Amazon Athena や Redshift Spectrum などの統合されたサービスでは、クエリに共有リソースを含めることができるように、リソースリンクが必要になります。プリンシパルは、別の から共有リソース AWS Glue Data Catalog へのリソースリンクを に作成する必要があります AWS アカウント。リソースリンクの詳細については、「[Lake Formation でのリソースリンクの仕組み](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html)」を参照してください。

*カタログリンクコンテナ*は、他のアカウントのローカルまたはクロスアカウントのフェデレーションデータベースレベルのカタログを参照する Data Catalog オブジェクトです AWS 。カタログリンクコンテナ内にデータベースリンクとテーブルリンクを作成することもできます。データベースリンクまたはテーブルリンクを作成するときは、同じターゲット Amazon Redshift データベースレベルカタログ (Amazon Redshift データベース) に存在するターゲットリソースを指定する必要があります。

カタログリンクコンテナを作成するには、Lake Formation の `CREATE_CATALOG` または `glue:CreateCatalog` アクセス許可が必要です。

 フェデレーティッドカタログ内のデータベースまたはテーブルを 間で共有するには、**クロスアカウントバージョン設定**バージョン 4 AWS アカウント以降が必要です。

## クロスアカウントフェデレーティッドカタログへのカタログリンクコンテナの作成
<a name="create-resource-link-catalog"></a>

 AWS Lake Formation コンソール、`CreateCatalog`API、 AWS Glue または AWS Command Line Interface () を使用して、任意の AWS リージョンの Redshift データベースレベルのフェデレーティッドカタログを指すカタログリンクコンテナを作成できますAWS CLI。

**共有カタログへのカタログリンクコンテナを作成するには (コンソール)**

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で AWS Lake Formation コンソールを開きます。Lake Formation `CREATE_CATALOG` アクセス許可を持つプリンシパルとしてサインインします。

1. ナビゲーションペインで **[カタログ]** を選択してから、**[カタログの作成]** を選択します。

1. **[カタログの詳細の設定]** ページで、以下の情報を指定します。  
**名前**  
カタログ名と同じルールに従う名前を入力します。名前は、ターゲット共有カタログと同じものにすることができます。  
**タイプ**  
カタログのタイプとして **[カタログリンクリンクコンテナ]** を選択します。  
**ソース**  
`Redshift` を選択してください。  
**ターゲット Redshift カタログ**  
Redshift のデータベースレベルのフェデレーティッドカタログを選択するか、リストからローカル (所有) カタログを選択します。  
このリストには、アカウントと共有されているすべてのカタログが含まれています。各カタログにカタログ所有者アカウント ID が記載されていることに注意してください。アカウントと共有されていることが分かっているカタログが表示されない場合は、以下を確認してください。  
   + データレイク管理者でない場合は、データレイク管理者からそのカタログに対する Lake Formation アクセス許可が付与されていることを確認します。
   + データレイク管理者であり、アカウントが付与元のアカウントと同じ AWS 組織にない場合は、カタログに関する AWS Resource Access Manager (AWS RAM) リソース共有招待を承諾していることを確認します。詳細については、「[からのリソース共有の招待の承諾 AWS RAM](accepting-ram-invite.md)」を参照してください。
コンソールを使用してカタログリンクコンテナを作成する場合、クロスアカウント Redshift カタログを選択しようとすると、**[ターゲット Redshift カタログ]** ドロップダウンが `No matches` を表示することがあります。この表示にもかかわらず、Amazon Redshift フェデレーティッドデータベースレベルカタログ (Amazon Redshift データベース) のターゲット ARN を入力フィールドに手動で入力しても、フォームは引き続き正常に動作します。例: `arn:aws:glue:us-east-1:123456789012:catalog/federated-catalog-redshift/dev`。  
この動作は、コンソールが現在サインインしているアカウント内のみで潜在的な候補を検索できるために発生します。ドロップダウンは自動入力機能を目的としていますが、クロスアカウントアクセスのために ARN を手動で入力することもできます。

1. Apache Iceberg クエリエンジンが Amazon Redshift 名前空間を読み書きできるようにするには、Amazon Redshift データウェアハウスのワークロードに影響を与えることなく、読み取りおよび書き込みオペレーションの実行に必要なコンピューティングリソースとストレージリソースを備えたマネージド Amazon Redshift クラスター AWS Glue を作成します。Amazon S3 バケットとの間でデータを転送するために必要なアクセス許可を持つ IAM ロールを指定する必要があります。

1. [**次へ**] を選択します。

1. (オプション) **[アクセス許可を追加]** を選択して、他のプリンシパルにアクセス許可を付与します。

   ただし、カタログリンクコンテナに対してアクセス許可を付与しても、ターゲットの (リンクされた) カタログへのアクセス許可は付与されません。Athena でカタログリンクが表示されるようにするには、ターゲットのカタログに対するアクセス許可を別途付与する必要があります。

1. 次に、カタログリンクコンテナの詳細を確認し、**[カタログを作成]** を選択します。

   これにより、**[カタログ]** ページでリンクコンテナ名を表示できます。

   これで、カタログリンクコンテナにデータベースリンクとテーブルリンクを作成して、クエリエンジンからのアクセスを有効にすることができます。

**カタログリンクコンテナ CLI の作成例**
+ 次の例では、`TargetRedshiftCatalog` オブジェクトは Amazon Redshift フェデレーティッドデータベースレベルカタログ (Amazon Redshift データベース) の ARN を指定します。カタログリンクコンテナを作成する際は、`DataLakeAccess` を有効にする必要があります。

  ```
  aws glue create-catalog \
    --cli-input-json 
      '{
          "Name": "linkcontainer", 
          "CatalogInput": {
              "TargetRedshiftCatalog": {
                 "CatalogArn": "arn:aws:us-east-1:123456789012:catalog/nscatalog/dev"
               },
              "CatalogProperties": {
                "DataLakeAccessProperties" : {
                  "DataLakeAccess" : true,
                  "DataTransferRole" : "arn:aws:iam::111122223333:role/DataTransferRole"
               } 
             }
          }
      }'
  ```

## カタログリンクコンテナでのリソースリンクの作成
<a name="create-db-table-link"></a>

 データベースリンクとテーブルリンクへのリソースリンクは、カタログリンクコンテナの下に作成できます。データベースリソースリンクまたはテーブルリソースリンクを作成するときは、リンクコンテナが指すのと同じターゲット Amazon Redshift データベースレベルカタログ (Amazon Redshift データベース) に存在するターゲットリソースを指定する必要があります。

 AWS Lake Formation コンソール、API、または AWS Command Line Interface () を使用して、共有 Amazon Redshift データベースまたはテーブルへのリソースリンクを作成できますAWS CLI。
+ 詳細な手順については、「[共有 Data Catalog データベースへのリソースリンクの作成](create-resource-link-database.md)」を参照してください。

  以下は、カタログリンクコンテナの下にデータベースリソースリンクを作成する AWS CLI 例です。

  ```
  aws glue create-database \
    --cli-input-json \
      '{
          "CatalogId": "111122223333:linkcontainer",
          "DatabaseInput": {
              "Name": "dblink",
               "TargetDatabase": {
                 "CatalogId": "123456789012:nscatalog/dev",
                  "DatabaseName": "schema1"
               }
          }
      }'
  ```
+ カタログリンクコンテナの下にテーブルリソースリンクを作成するには、まずローカルに AWS Glue データベースを作成して AWS Glue Data Catalog 、テーブルリソースリンクを含める必要があります。

  共有テーブルへのリソースリンクの作成の詳細については、「[共有 Data Catalog テーブルへのリソースリンクの作成](create-resource-link-table.md)」を参照してください。
  +  テーブルリソースリンクを含むデータベースの作成例

    ```
    aws glue create-database \
      --cli-input-json \
          '{
              "CatalogId": "111122223333:linkcontainer",
              "DatabaseInput": {
                  "Name": "db1",
                  "Description": "creating parent database for table link"
              }
          }'
    ```
  +  テーブルリソースリンクの作成例

    ```
    aws glue create-table \
      --cli-input-json \
        '{
            "CatalogId": "111122223333:linkcontainer",
             "DatabaseName": "db1",
            "TableInput": {
                "Name": "tablelink",
                "TargetTable": {
                    "CatalogId": "123456789012:nscatalog/dev",
                   "DatabaseName": "schema1", 
                    "Name": "table1"
                 }
            }
        }'
    ```

# フェデレーティッドカタログの削除
<a name="delete-rs-fed-catalog"></a>

 `glue:DeleteCatalog` オペレーションまたはコンソール AWS Glue Data Catalog を使用して、 で作成したフェデレーティッドカタログを削除できます AWS Lake Formation 。

**フェデレーティッドカタログを削除するには (コンソール)**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. カタログリストから削除するカタログを選択します。

1. **[アクション]** で、**[削除]** を選択します。

1. **[ドロップ]** を選択して確認すると、データカタログからフェデレーティッドカタログが削除されています。  
![\[カタログの削除の確認。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/delete-fed-catalog.png)

**フェデレーティッドカタログを削除するには (CLI)**
+ 

  ```
  aws glue delete-catalog 
   --catalog-id 123456789012:catalog name
  ```

# フェデレーティッドカタログのクエリ
<a name="query-redshift-fed-catalog"></a>

他のプリンシパルにアクセス許可を付与した後、Amazon Redshift、Amazon EMR、、および AWS Glue ETL を使用して SQL ツールにログインすることで Amazon Athena、フェデレーティッドカタログのテーブルにサインインしてクエリを開始できます。

 Apache Iceberg Rest 拡張エンドポイントまたはスタンドアロン Spark アプリケーション AWS Glue Data Catalog を使用して に接続する方法の詳細については、「 AWS Glue デベロッパーガイド[」の「 セクションへのアクセス AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/access_catalog.html)」を参照してください。

データ定義言語 (DDL) クエリを使用し、Amazon EMR の Apache Spark を使用してデータベース内でテーブルを作成および管理できます。Amazon Redshift データベースでテーブルを作成および削除するには、プリンシパルに Lake Formation `Create table`、`Drop` アクセス許可が必要です。

 データカタログアクセス許可を付与する方法の詳細については、「[データカタログリソースに対するアクセス許可の付与](granting-catalog-permissions.md)」を参照してください。

からのカタログリソースのクエリの詳細については Amazon Athena、Amazon Athena ユーザーガイド」の「 [AWS Glue Data Catalog からのクエリ Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/gdc-register.html)」を参照してください。

# その他のリソース
<a name="additional-resources-byod"></a>

[Amazon SageMaker Lakehouse](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse.html) を使用すると、データウェアハウスとデータレイクの両方でデータへの統合されたアクセスを実現できます。SageMaker Lakehouse を使用すると、オープンな Apache Iceberg REST API を通じて優先分析エンジン、機械学習エンジン、ビジネスインテリジェンスエンジンを使用し、一貫性のあるきめ細かなアクセスコントロールによってデータへの安全なアクセスを確保できます。
+ [Amazon SageMaker ワークショップ](https://catalog.us-east-1.prod.workshops.aws/workshops/107188af-3663-4bbf-bb35-93d514d406da/en-US/03lakehouse)
+ [Amazon SageMaker Lakehouse を使用して企業のデータアクセスを簡素化する](https://aws.amazon.com/blogs/big-data/simplify-data-access-for-your-enterprise-using-amazon-sagemaker-lakehouse/)

# の外部データソースへのフェデレーション AWS Glue Data Catalog
<a name="federated-catalog-data-connection"></a>

 AWS Glue Data Catalog (データカタログ) は、Amazon Redshift、Snowflake、Amazon RDS などのクラウドデータベース Amazon DynamoDB、Oracle、Amazon MSK などのストリーミングサービス、および AWS Glue 接続を使用して Teradata などのオンプレミスシステムに接続できます。これらの接続は に保存 AWS Glue Data Catalog され、 に登録されるため AWS Lake Formation、使用可能なデータソースごとにフェデレーションカタログを作成できます。

 *フェデレーティッドカタログ*は、外部データシステムのデータベースを指す最上位コンテナです。これにより、抽出、変換、ロード (ETL) プロセスなしで、外部データシステムからデータを直接クエリできます。

 AWS Glue 接続の詳細については、「 AWS Glue デベロッパーガイド」の[「データへの接続](https://docs.aws.amazon.com/glue/latest/dg/glue-connections.html)」を参照してください。

データレイク管理者は、[Amazon SageMaker Lakehouse](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse.html) または [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html) を使用してフェデレーティッドカタログを作成できます。

データレイク管理者は、Lake Formation を使用してカタログ内のオブジェクトに対するきめ細かなアクセス許可を付与し、カタログ、データベース、テーブル、列、行、セルなどのさまざまなレベルでアクセスを制御できます。データアナリストは、Athena を使用してカタログ化されたデータソースを検出およびクエリし、Lake Formation は定義されたアクセスポリシーを適用します。アナリストは、各ソースに個別に接続することなく、1 つのクエリで複数のソース間のデータを結合できます。

**Topics**
+ [ワークフロー](#connect-data-source-workflow)
+ [データカタログを外部データソースに接続するための前提条件](connect-data-source-prerequisites.md)
+ [AWS Glue 接続を使用したフェデレーティッドカタログの作成](create-fed-catalog-data-source.md)
+ [カタログオブジェクトの表示](view-fed-glue-connection-catalog.md)
+ [フェデレーティッドカタログの削除](delete-glue-fed-catalog.md)
+ [フェデレーティッドカタログのクエリ](query-glue-fed-catalog.md)
+ [その他のリソース](additional-resources-fed-connection.md)

## ワークフロー
<a name="connect-data-source-workflow"></a>

データレイク管理者または必要なアクセス許可を持つユーザーは、 AWS Glue Data Catalog を外部データソースに接続するための次のステップを完了します。

1.  データソース AWS Glue への接続を作成します。接続を登録する場合、接続の登録に使用される IAM ロールは、Lambda 関数と Amazon S3 スピルバケットの場所にアクセスできる必要があります。

1.  Lake Formation との接続を登録します。

1.  AWS Glue 利用可能なデータソースに接続するための接続を使用して、データカタログにフェデレーティッドカタログを作成します。データベース、テーブル、ビューはデータカタログ内で自動的にカタログ化され、Lake Formation に登録されます。

1.  Lake Formation アクセス許可を使用して、特定のカタログ、データベース、およびテーブルへのアクセスをデータアナリストに許可します。Lake Formation を使用してデータレイク、ウェアハウス、OLTP ソース全体できめ細かなアクセスコントロールポリシーを定義できるため、行レベルと列レベルのセキュリティフィルターが可能になります。

    データアナリストは、個別の接続やデータソース認証情報を必要とせずに、Athena の SQL クエリを使用し、データカタログを介してすべてのデータにアクセスできるようになります。アナリストは、複数のソースからデータをスキャンするフェデレーティッド SQL クエリを実行し、複雑なデータパイプラインを使用せずにインプレースでデータを結合できます。

# データカタログを外部データソースに接続するための前提条件
<a name="connect-data-source-prerequisites"></a>

 AWS Glue Data Catalog を外部データソースに接続し、接続を Lake Formation に登録して、フェデレーティッドカタログを設定するには、次の要件を満たす必要があります。
**注記**  
Lake Formation データレイク管理者は、外部データソースに接続するための AWS Glue 接続を作成し、フェデレーションカタログを作成することをお勧めします。

1. 

**IAM ロールを作成します。**
   +  外部データソースへの接続の作成に必要なリソース (Lambda 関数、Amazon S3 スピルバケット、IAM ロール、および AWS Glue 接続) をデプロイするために必要なアクセス許可を持つロールを作成します。
   +  AWS Glue 接続プロパティ (Lambda 関数と Amazon S3 スピルバケット) にアクセスするために必要な最小限のアクセス許可を持つロールを作成します。これは、Lake Formation に接続を登録するときに含めるロールです。

     Lake Formation を使用してデータレイク内のデータを管理および保護するには、 AWS Glue 接続を Lake Formation に登録する必要があります。これにより、Lake Formation はフェデレーティッドデータソースをクエリするために Amazon Athena に認証情報を提供できます。

     ロールには、Amazon S3 バケットと Lambda 関数に対する `Select` または `Describe` アクセス許可が必要です。
     +  s3:ListBucket 
     + s3:GetObject
     +  lambda:InvokeFunction 

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

****  

     ```
     {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "s3:*"
           ],
           "Resource": [
             "arn:aws:s3:::amzn-s3-demo-bucket1/object/*",
             "arn:aws:s3:::amzn-s3-demo-bucket1/object"
           ]
         },
         {
           "Sid": "lambdainvoke",
           "Effect": "Allow",
           "Action": "lambda:InvokeFunction",
           "Resource": "arn:aws:lambda:us-east-1:123456789012:function:example-lambda-function"
         },
         {
           "Sid": "gluepolicy",
           "Effect": "Allow",
           "Action": "glue:*",
           "Resource": "*"
         }
       ]
     }
     ```

------
   + 接続の登録に使用される IAM ロールに次の信頼ポリシーを追加します。

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

****  

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

------
   + 場所を登録するデータレイク管理者は、ロールに対する `iam:PassRole` アクセス許可を持っている必要があります。

     以下は、この許可を付与するインラインポリシーです。*<account-id>* を有効な AWS アカウント番号に置き換え、*<role-name>* をロールの名前に置き換えます。

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

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "PassRolePermissions",
                 "Effect": "Allow",
                 "Action": [
                     "iam:PassRole"
                 ],
                 "Resource": [
                     "arn:aws:iam::111122223333:role/example-role-name>"
                 ]
             }
         ]
     }
     ```

------
   +  データカタログでフェデレーティッドカタログを作成するには、データレイク設定 (`aws lakeformation get-data-lake-settings`) をチェックして、使用している IAM ロールが Lake Formation データレイク管理者であることを確認します。

      データレイク管理者でない場合は、カタログを作成するための Lake Formation `CREATE_CATALOG` アクセス許可が必要です。次の例は、カタログ作成に必要なアクセス許可を付与する方法を示しています。

     ```
     aws lakeformation grant-permissions \
     --cli-input-json \
             '{
                 "Principal": {
                  "DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/non-admin"
                 },
                 "Resource": {
                     "Catalog": {
                     }
                 },
                 "Permissions": [
                     "CREATE_CATALOG",
                     "DESCRIBE"
                 ]
             }'
     ```

1. データソース内のデータを暗号化するためにカスタマーマネージドキーを使用している場合 AWS KMS は、次のキーポリシーをキーに追加します。アカウント番号を有効な AWS アカウント番号に置き換え、ロール名を指定します。データはデフォルトで KMS キーを使用して暗号化されます。Lake Formation には、暗号化用のカスタム KMS キーを作成するオプションがあります。カスタマーマネージドキーを使用している場合は、特定のキーポリシーをキーに追加する必要があります。

   カスタマーマネージドキーの許可を管理する方法の詳細については、[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を参照してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-1"
           }
       ]
   }
   ```

------

# AWS Glue 接続を使用したフェデレーティッドカタログの作成
<a name="create-fed-catalog-data-source"></a>

 AWS Glue Data Catalog を外部データソースに接続するには、外部データソースとの通信を可能にする接続を使用する必要があります AWS Glue 。コンソール AWS Glue 、[Create connection](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateConnection.html) API、Amazon SageMaker Lakehouse コンソールを使用して接続を作成できます AWS Glue 。

 AWS Glue 接続を作成する手順については、「 AWS Glue デベロッパーガイド[」の「データへの接続](https://docs.aws.amazon.com/glue/latest/dg/glue-connections.html)」または[Amazon SageMaker Lakehouse での接続の作成](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse-create-connection.html)」を参照してください。

ユーザーがフェデレーティッドテーブルに対してクエリを実行すると、Lake Formation は AWS Glue 接続で指定された AWS Lambda 関数を呼び出してデータソースからメタデータオブジェクトを取得する認証情報を提供します。

------
#### [ AWS マネジメントコンソール ]

**外部データソースからフェデレーティッドカタログを作成し、アクセス許可を設定するには (コンソール)**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. **[カタログの作成]** オプションを選択します。

1. **[カタログの設定]** の詳細ページで、次の情報を入力します。  
![\[オプションを含むカタログ作成ページ。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/create-glue-connection-catalog.png)
   + **名前** – フェデレーティッドカタログの一意の名前。名前は変更できず、小文字にする必要があります。名前は最大 255 文字で、アカウント内で一意である必要があります。
   + **タイプ** – カタログタイプとしてフェデレーティッドカタログを選択します。
   + **ソース** – ドロップダウンからデータソースを選択します。接続を作成したデータソースが表示されます。外部データソース AWS Glue への接続の作成の詳細については、[「 デベロッパーガイド」の「コネクタの接続](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html)の作成」または[Amazon SageMaker Lakehouse での接続の作成](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse-create-connection.html)」を参照してください。 AWS Glue 
   + **接続** — データソースへの既存の AWS Glue 接続を選択します。
   + **説明** – データソースから作成されたカタログの説明を入力します。

1. クエリエンジンがデータソースのデータにアクセスするための認証情報を提供するために Lake Formation が引き受ける **[IAM ロール]** を選択します。このロールには、 AWS Glue 接続にアクセスし、Lambda 関数を呼び出して外部データソースのデータにアクセスするために必要なアクセス許可が必要です。

   IAM コンソールで**新しいロールを作成**することもできます。

   必要なアクセス許可については、「[データカタログを外部データソースに接続するための前提条件](connect-data-source-prerequisites.md)」セクションを参照してください。

1.  **[コネクタを有効化してデータソースに接続する]** オプションを選択して、Athena がフェデレーティッドクエリを実行できるようにします。

   サポートされているコネクタのリストについては、「Amazon Athena ユーザーガイド」の「[接続を登録する](https://docs.aws.amazon.com/athena/latest/ug/register-connection-as-gdc.html)」を参照してください。

1. **暗号化オプション** – カスタムキーを使用してカタログを暗号化する場合は、**[暗号化設定のカスタマイズ]** オプションを選択します。カスタムキーを使用するには、KMS キーにカスタムマネージドキーポリシーを追加する必要があります。

1. **[次へ]** を選択して、他のプリンシパルにアクセス許可を付与します。

1. **[アクセス許可を付与]** ページで、**[アクセス許可を追加]** を選択します。

1.  **[アクセス許可を追加]** 画面で、プリンシパルと、付与するアクセス許可のタイプを選択します。  
![\[プリンシパルタイプと許可オプションを含むカタログアクセス許可ページ。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/catalog-permissions.png)
   +  **[Principals]** (プリンシパル) セクションでプリンシパルタイプを選択してから、アクセス許可の付与先となるプリンシパルを指定します。
     + **IAM ユーザーとロール** – IAM ユーザーとロールのリストから、ユーザーまたはロールを 1 つ以上選択します。
     + **SAML ユーザーとグループ** – SAML および Amazon Quick ユーザーとグループの場合は、SAML を介してフェデレーションされたユーザーまたはグループの 1 つ以上の Amazon リソースネーム (ARNs)、または Amazon Quick ユーザーまたはグループの ARNs を入力します。各 ARN の後で **[Enter]** キーを押します。
   +  **[Permissions]** (許可) セクションで、許可と付与可能な許可を選択します。

     **[カタログのアクセス許可]** で、付与するアクセス許可を 1 つ以上選択します。

     カタログ内のすべてのリソースに対する無制限の管理アクセス許可を付与するには、**[スーパーユーザー]** を選択します。

      **付与可能なアクセス**許可で、付与受信者が AWS アカウントの他のプリンシパルに付与できるアクセス許可を選択します。このオプションは、外部アカウントから IAM プリンシパルにアクセス許可を付与する場合はサポートされません。

1. **[次へ]** を選択して情報を確認し、カタログを作成します。**[カタログ]** リストには、新しいフェデレーティッドカタログが表示されます。

   **[データの場所]** リストには、新しく登録されたフェデレーティッド接続が表示されます。  
![\[データの場所は、フェデレーティッド接続とともに一覧表示されます。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/federated_data_lake_location.png)

------
#### [ AWS CLI ]

**外部データソースからフェデレーティッドカタログを作成し、アクセス許可を設定するには**

1.  次の例は、 AWS Glue 接続を作成する方法を示しています。

   ```
   aws glue create-connection 
     --connection-input \
         '{
            "Name": "DynamoDB connection",
            "ConnectionType": "DYNAMODB",
            "Description": "A connection created for DynamoDB",
            "ConnectionProperties": {},
            "AthenaProperties": "spill_prefix": "your_spill_prefix",
            "lambda_function_arn": "Lambda_function_arn",
            "spill_bucket": "Your_Bucket_name",
            "AuthenticationConfiguration": {}
         }'
   ```

1.  次の例は、Lake Formation に AWS Glue 接続を登録する方法を示しています。

   ```
   aws lakeformation register-resource 
     --cli-input-json \
       {"ResourceArn":"arn:aws:glue:us-east-1:123456789012:connection/dynamo","RoleArn":"arn:aws:iam::123456789012:role/AdminTelemetry","WithFederation":true}
   ```

1.  次の例は、フェデレーティッドカタログを作成する方法を示しています。

   ```
   aws glue create-catalog 
    --cli-input-json \
         '{
          "Name":"ddbcatalog",
          "CatalogInput":{"CatalogProperties":{"DataLakeAccessProperties":{"DataTransferRole":"arn:aws:iam::123456789012:role/role name"}},
          "CreateDatabaseDefaultPermissions":[],
          "CreateTableDefaultPermissions":[],
          "FederatedCatalog":{"ConnectionName":"dynamo","Identifier":"dynamo"}
            }
          }'
   ```

------

# カタログオブジェクトの表示
<a name="view-fed-glue-connection-catalog"></a>

使用可能なデータソースごとに、 は対応するカタログを に AWS Glue 作成します AWS Glue Data Catalog。カタログを作成したら、Lake Formation コンソールまたは AWS CLIを使用してカタログ内のデータベースとテーブルを表示できます。/ の場合 

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

1. [データカタログ] で **[カタログ]** を選択します。カタログページには、アクセス許可があるカタログが表示されます。  
![\[カタログを表示します。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/view-catalogs.png)

1. リストからカタログを選択すると、カタログに含まれるデータベースとテーブルが表示されます。リストには、アカウント内のデータベースとリソースリンクも含まれています。これは、外部アカウントの共有データベースとテーブルへのリンクで、データレイク内のデータへのクロスアカウントアクセスに使用されます。  
![\[カタログ/データベースを表示します。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/catalog-database-view.png)

1.  **[表示]** で **[テーブル]** オプションを選択して、データベース内のテーブルを表示および管理します。

****AWS CLI カタログとデータベースを表示するための例****  
次の例は、 を使用してカタログを表示する方法を示しています。 AWS CLI 

```
aws glue get-catalog \
--catalog-id 123456789012:dynamodbcatalog
```

次の例は、アカウント内のすべてのカタログをリクエストする方法を示しています。

```
aws glue get-catalogs \
 --recursive
```

次のリクエスト例は、カタログでデータベースを取得する方法を示しています。

```
aws glue get-database \
--catalog-id 123456789012:dynamodbcatalog
--database-name database name
```

# フェデレーティッドカタログの削除
<a name="delete-glue-fed-catalog"></a>

 `glue:DeleteCatalog` オペレーションまたはコンソール AWS Glue Data Catalog を使用して、 で作成したフェデレーティッドカタログを削除できます AWS Lake Formation 。

**フェデレーティッドカタログを削除するには (コンソール)**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. カタログリストから削除するカタログを選択します。

1. **[アクション]** で、**[削除]** を選択します。

1. **[ドロップ]** を選択して確認すると、データカタログからフェデレーティッドカタログが削除されています。  
![\[カタログの削除の確認。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/delete-fed-catalog.png)

**フェデレーティッドカタログを削除するには (CLI)**
+ 

  ```
  aws glue delete-catalog 
    --catalog-id 123456789012:catalog name
  ```

# フェデレーティッドカタログのクエリ
<a name="query-glue-fed-catalog"></a>

他のプリンシパルにアクセス許可を付与すると、プリンシパルはサインインし、Athena を使用してフェデレーティッドカタログ内のテーブルのクエリを開始できます。

フェデレーティッドデータベースでテーブルを作成および削除するには、プリンシパルに Lake Formation の `Create table` と `Drop` のアクセス許可が必要です。

 データカタログアクセス許可を付与する方法の詳細については、「[データカタログリソースに対するアクセス許可の付与](granting-catalog-permissions.md)」を参照してください。

データカタログのクエリの詳細については Amazon Athena、Amazon Athena ユーザーガイド」の「 [AWS Glue Data Catalog からのクエリ Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/gdc-register.html)」を参照してください。

# その他のリソース
<a name="additional-resources-fed-connection"></a>

 このブログ記事では、データアナリストが Amazon Redshift データウェアハウスや Amazon DynamoDB データベースなど、S3 データレイクの外部に保存されているデータに、単一の統一されたエクスペリエンスを通じて安全にアクセスしてクエリを実行する方法を示します。管理者は、さまざまな詳細レベルでアクセスコントロールを適用して、データアクセスを拡張しながら機密データを確実に保護できるようになりました。これにより、組織はセキュリティとコンプライアンスを維持しながらデータイニシアチブを加速できるため、より迅速なデータ主導の意思決定が可能になります。
+ [Amazon SageMaker Lakehouse を使用した Amazon Athena フェデレーティッドクエリのカタログ化と管理](https://aws.amazon.com/blogs/big-data/catalog-and-govern-amazon-athena-federated-queries-with-amazon-sagemaker-lakehouse/)

# Amazon S3 Tables と AWS Glue Data Catalog および の統合 AWS Lake Formation
<a name="create-s3-tables-catalog"></a>

[Amazon S3 Tables](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html) は、分析ワークロードに特別に最適化された S3 ストレージを提供し、クエリのパフォーマンスを向上させながらコストを削減します。S3 Tables のデータは、新しいバケットタイプ、つまりテーブルをサブリソースとして保存する*テーブルバケット*に保存されます。S3 テーブルには Apache Iceberg 標準のサポートが組み込まれているため、Apache Spark などの一般的なクエリエンジンを使用して、Amazon S3 テーブルバケット内の表形式データに対して簡単にクエリを実行できます。

Amazon S3 Tables は、IAM アクセスコントロールまたは IAM および Lake Formation 許可 AWS Glue Data Catalog を使用して と統合できます。
+ **IAM アクセスコントロール**: IAM ポリシーを使用して S3 テーブルとデータカタログへのアクセスを制御します。このアクセスコントロールアプローチでは、リソースにアクセスするには、S3 Tables リソースと Data Catalog オブジェクトの両方に対する IAM アクセス許可が必要です。
+ **Lake Formation アクセスコントロール**: データカタログを介して S3 テーブルへのアクセスを制御するために AWS Glue 、IAM アクセス許可に加えて AWS Lake Formation 許可を使用します。このモードでは、プリンシパルは Data Catalog を操作するための IAM アクセス許可を必要とし、Lake Formation 許可によってプリンシパルがアクセスできるカタログリソース (データベース、テーブル、列、行) が決まります。このモードは、粗粒度のアクセスコントロール (データベースレベルとテーブルレベルの権限) ときめ細かなアクセスコントロール (列レベルと行レベルのセキュリティ) の両方をサポートします。登録されたロールが設定され、認証情報供給が有効になっている場合、Lake Formation は登録されたロールを使用してプリンシパルに代わって認証情報を提供するため、プリンシパルに S3 Tables IAM アクセス許可は必要ありません。Lake Formation アクセスコントロールは、サードパーティーの分析エンジンの認証情報供給もサポートしています。

このセクションでは、以下のシナリオ AWS Lake Formation で との統合を設定するためのガイダンスを提供します。
+ **シナリオ A**: IAM アクセスコントロールを使用して S3 Tables と Data Catalog を統合し、今後は を使用する予定です AWS Lake Formation。詳細については、「[S3 Tables 統合のアクセスコントロールの変更](manage-s3tables-catalog-integration.md)」を参照してください。
+ **シナリオ B**: を使用して S3 テーブルとデータカタログを統合する予定 AWS Lake Formation で、現在アカウントとリージョンに統合されていません。[Amazon S3 テーブルカタログを データカタログおよび Lake Formation と統合するための前提条件](s3tables-catalog-prerequisites.md) セクションから開始し、 に従います[Amazon S3 Tables 統合の有効化](enable-s3-tables-catalog-integration.md)。
+ **シナリオ C**: を使用して S3 テーブルとデータカタログを統合し AWS Lake Formation 、IAM を使用する予定です。詳細については、「[S3 Tables 統合のアクセスコントロールの変更](manage-s3tables-catalog-integration.md)」を参照してください。

[S3 Tables を AWS 分析サービスと統合する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)の手順に従って、 AWS Glue Data Catalog とテーブルリソースにアクセスし、 AWS 分析サービスと連携するための適切なアクセス許可があることを確認してください。

**Topics**
+ [データカタログと Lake Formation の統合の仕組み](#w2aac13c27c19)
+ [Amazon S3 テーブルカタログを データカタログおよび Lake Formation と統合するための前提条件](s3tables-catalog-prerequisites.md)
+ [Amazon S3 Tables 統合の有効化](enable-s3-tables-catalog-integration.md)
+ [S3 テーブルカタログでのデータベースとテーブルの作成](create-databases-tables-s3-catalog.md)
+ [別の AWS アカウントに Amazon S3 テーブルバケットを登録する](register-cross-account-s3-table-bucket.md)
+ [アクセス許可の付与](s3-tables-grant-permissions.md)

## データカタログと Lake Formation の統合の仕組み
<a name="w2aac13c27c19"></a>

S3 テーブルカタログを データカタログおよび Lake Formation と統合すると、 AWS Glue サービスは AWS リージョンに固有のアカウントのデフォルトデータカタログに `s3tablescatalog` という名前の単一のフェデレーティッドカタログを作成します。統合では、アカウントとフェデレーティッドカタログ内のすべての Amazon S3 テーブルバケットリソース AWS リージョン を次の方法でマッピングします。
+ Amazon S3 テーブルバケットは、データカタログ内のマルチレベルカタログになります。
+ 関連付けられた Amazon S3 名前空間は、データカタログにデータベースとして登録されます。
+ テーブルバケット内の Amazon S3 Tables は、データカタログ内のテーブルになります。

![\[S3 Tables と 間のオブジェクトのマッピング AWS Glue Data Catalog。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/S3Tables-glue-catalog.png)


 Lake Formation と統合した後、テーブルバケットカタログに Apache Iceberg テーブルを作成し、 Amazon Athena Amazon EMR やサードパーティー AWS の分析エンジンなどの統合分析エンジンを介してそれらにアクセスできます。

統合で Lake Formation も有効にすると、きめ細かなアクセスコントロールが可能になります AWS Lake Formation。このセキュリティアプローチは、 (IAM) アクセス許可に加えて AWS Identity and Access Management 、テーブルを操作する前に、テーブルに対する Lake Formation アクセス許可を IAM プリンシパルに付与する必要があることを意味します。

 AWS Lake Formationには、2 つの主な許可タイプがあります。
+ メタデータに対するアクセス許可は、データカタログ内でメタデータデータベースとテーブルを作成、読み取り、更新、削除できるかどうかを制御します。
+ 基になるデータに対するアクセス許可は、データカタログリソースの参照先となる Amazon S3 の場所にデータを読み書きできるかどうかを制御します。

Lake Formation では、独自のアクセス許可モデルと IAM アクセス許可モデルを組み合わせて使用して、データカタログリソースと基になるデータへのアクセスを制御します。
+ データカタログリソースまたは基になるデータへのアクセスリクエストが成功するには、そのリクエストが IAM と Lake Formation の両方によるアクセス許可のチェックに合格する必要があります。
+ IAM アクセス許可は Lake Formation および AWS Glue APIsとリソースへのアクセスを制御し、Lake Formation アクセス許可は Data Catalog リソース、Amazon S3 ロケーション、および基盤となるデータへのアクセスを制御します。

Lake Formation 許可は付与されたリージョン内でのみ適用されます。プリンシパルが Lake Formation 許可を付与されるには、データレイク管理者または必要なアクセス許可を持つ別のプリンシパルによって認可される必要があります。

# Amazon S3 テーブルカタログを データカタログおよび Lake Formation と統合するための前提条件
<a name="s3tables-catalog-prerequisites"></a>

以下は、Amazon S3 テーブルと AWS Glue Data Catalog および の統合を有効にするための前提条件です AWS Lake Formation。

1.  Amazon S3 Tables の統合を有効にすると、Lake Formation は S3 テーブルの場所を自動的に登録します。Lake Formation にテーブルバケットの場所を登録するには、`lakeformation:RegisterResource`、`lakeformation:RegisterResourceWithPrivilegedAccess`、および `lakeformation:CreateCatalog` のアクセス許可を持つ IAM ロール/ユーザーが必要です。管理者以外のこれらのアクセス許可を持つユーザーがカタログの場所を登録すると、Lake Formation によってその場所に対する `DATA_LOCATION_ACCESS` アクセス許可が自動的に付与され、呼び出し元のプリンシパルに、登録されたデータの場所でサポートされているすべての Lake Formation オペレーションを実行するアクセス許可が付与されます。

1. <a name="step3-permissions"></a> S3 テーブル統合を有効にする場合は、データアクセスを許可する認証情報を提供する Lake Formation の IAM ロールを選択する必要があります。S3 テーブルバケットへの Lake Formation データアクセス用の IAM ロールを作成します。テーブルバケットを Lake Formation に登録する際に使用する IAM ロールには、次のアクセス許可が必要です。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LakeFormationPermissionsForS3ListTableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTableBuckets"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTableBucket",
                   "s3tables:GetTableBucket",
                   "s3tables:CreateNamespace",
                   "s3tables:GetNamespace",
                   "s3tables:ListNamespaces",
                   "s3tables:DeleteNamespace",
                   "s3tables:DeleteTableBucket",
                   "s3tables:CreateTable",
                   "s3tables:DeleteTable",
                   "s3tables:GetTable",
                   "s3tables:ListTables",
                   "s3tables:RenameTable",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData",
                   "s3tables:PutTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:123456789012:bucket/*"
               ]
           }
       ]
   }
   ```

------

   詳細については、「[ロケーションの登録に使用されるロールの要件](registration-role.md)」を参照してください。

1.  Lake Formation サービスでロールを引き受け、統合された分析エンジンに一時的な認証情報を提供できるようにするには、IAM ロールに次の信頼ポリシーを追加します。

   ```
   {
     "Effect": "Allow",
     "Principal": {
       "Service": "lakeformation.amazonaws.com"
     },
     "Action": [
       "sts:AssumeRole",
       "sts:SetSourceIdentity",
       "sts:SetContext"  # add action to trust relationship when using IAM Identity center principals with Lake Formation
     ]
   }
   ```

**注記**  
 AWS 分析サービスの統合プロセスが更新されました。プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上します。統合を更新するには:  
まず、Lake Formation で既存の S3 テーブルカタログを削除します。カタログを削除するには、カタログリストから `s3tablescatalog` カタログを選択し、**[アクション]** から **[削除]** を選択します。
次に、`s3tablescatalog` のデータの場所を登録解除します。  
Lake Formation コンソールの **[管理]** セクションで、**[データの場所]** を選択します。
場所を選択し、**[アクション]** メニューで **[削除]** を選択します。
確認を求めるプロンプトが表示されたら、**[Remove]** (削除) を選択します。  
データロケーションの登録解除の詳細な手順については、[Amazon S3 ロケーションの登録解除](unregister-location.md)「」セクションを参照してください。
次に、[Amazon S3 Tables 統合の有効化](enable-s3-tables-catalog-integration.md)「」セクションの更新された統合ステップに従います。

# Amazon S3 Tables 統合の有効化
<a name="enable-s3-tables-catalog-integration"></a>

Amazon S3 コンソールを使用して Amazon S3 テーブルバケットを作成し、 AWS 分析サービスと統合できます。詳細については、「[Amazon S3 Tables と AWS 分析サービスの統合](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)」を参照してください。

 では AWS Lake Formation、Lake Formation コンソールまたは AWS Lake Formation を使用して、Amazon S3 Tables と AWS Glue Data Catalog および との統合を有効にできます AWS CLI。

## Amazon S3 Tables をデータカタログおよび Lake Formation と統合するには (コンソール)
<a name="w2aac13c27c23b7b1"></a>

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. **[カタログ]** ページで **[S3 テーブル統合を有効にする]** を選択します。  
![\[カタログページの S3 テーブル統合を有効にするオプション。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/enable-s3-table-integration.png)

1.  Lake Formation が分析クエリエンジンに認証情報を提供するために必要なアクセス許可を持つ IAM ロールを選択します。ロールがデータにアクセスするために必要なアクセス許可については、「前提条件」セクションの「[step3-permissions](s3tables-catalog-prerequisites.md#step3-permissions)」を参照してください。  
![\[IAM ロール を含む S3 統合の有効化画面。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/enable-s3-table-catalog.png)

1.  **[外部エンジンに、Amazon S3 の場所のデータに対するフルアクセス許可を付与する]** を選択します。サードパーティーエンジンのフルテーブルアクセスを有効にすると、Lake Formation は IAM セッションタグの検証を実行せずにサードパーティーエンジンに直接認証情報を返します。つまり、アクセスするテーブルに Lake Formation のきめ細かなアクセスコントロールを適用することはできません。

1. **[有効化]** を選択します。S3 Tables の新しいカタログがカタログリストに追加されます。S3 テーブルカタログ統合を有効にすると、サービスは S3 テーブルバケットのデータロの場所を Lake Formation に登録します。

1. カタログを選択してカタログオブジェクトを表示し、他のプリンシパルにアクセス許可を付与します。  
![\[S3 テーブルカタログ\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/s3-table-catalog.png)

   マルチレベルカタログを作成するには、「Amazon Simple Storage Service ユーザーガイド」の[「テーブルバケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)」セクションを参照してください。

## Amazon S3 Tables をデータカタログおよび Lake Formationと統合するには (CLI)
<a name="w2aac13c27c23b7b3"></a>

前提条件セクションに従って、Lake Formation がテーブルリソースにアクセスできるようにする IAM サービスロールを作成します。

1. 次の信頼ポリシーを含むファイルを `Role-Trust-Policy.json` という名前で作成します。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
         {
           "Sid": "LakeFormationDataAccessPolicy",
           "Effect": "Allow",
           "Principal": {
             "Service": "lakeformation.amazonaws.com"
           },
           "Action": [
               "sts:AssumeRole",
               "sts:SetContext",
               "sts:SetSourceIdentity"
           ],
           "Condition": {
             "StringEquals": {
               "aws:SourceAccount": "111122223333"
             }
           }
         }
       ]
   }
   ```

1. 次のコマンドを使用して IAM サービスロールを作成します。

   ```
   aws iam create-role \
     --role-name S3TablesRoleForLakeFormation \
     --assume-role-policy-document file://Role-Trust-Policy.json
   ```

1. 次のポリシーを含むファイルを `LF-GluePolicy.json` という名前で作成します。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LakeFormationPermissionsForS3ListTableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTableBuckets"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTableBucket",
                   "s3tables:GetTableBucket",
                   "s3tables:CreateNamespace",
                   "s3tables:GetNamespace",
                   "s3tables:ListNamespaces",
                   "s3tables:DeleteNamespace",
                   "s3tables:DeleteTableBucket",
                   "s3tables:CreateTable",
                   "s3tables:DeleteTable",
                   "s3tables:GetTable",
                   "s3tables:ListTables",
                   "s3tables:RenameTable",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData",
                   "s3tables:PutTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
               ]
           }
       ]
   }
   ```

1. 次のコマンドを使用してポリシーをロールにアタッチします。

   ```
   aws iam put-role-policy \
     --role-name S3TablesRoleForLakeFormation \
     --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \
     --policy-document file://LF-GluePolicy.json
   ```

1. 以下を含むファイルを `input.json` という名前で作成します。

   ```
   {
       "ResourceArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
       "WithFederation": true,
       "RoleArn": "arn:aws:iam::111122223333:role/S3TablesRoleForLakeFormation"
   }
   ```

1. 次のコマンドを使用してテーブルバケットを Lake Formation に登録します。

   ```
   aws lakeformation register-resource \
     --region us-east-1 \
     --with-privileged-access \
     --cli-input-json file://input.json
   ```

1. 次のカタログを含むファイルを `catalog.json` という名前で作成します。

   ```
   {
      "Name": "s3tablescatalog",
      "CatalogInput": {
         "FederatedCatalog": {
             "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
             "ConnectionName": "aws:s3tables"
          },
          "CreateDatabaseDefaultPermissions": [],
          "CreateTableDefaultPermissions": [],
          "AllowFullTableExternalDataAccess": "True"
      }
   }
   ```

1. 次のコマンドを使用して `s3tablescatalog` カタログを作成します。このカタログを作成すると、テーブルバケット、名前空間、テーブルに対応するオブジェクト AWS Glue Data Catalog が に入力されます。

   ```
   aws glue create-catalog \
     --region us-east-1 \
     --cli-input-json file://catalog.json
   ```

1. 次のコマンド AWS Glue を使用して、`s3tablescatalog`カタログが に追加されていることを確認します。

   ```
   aws glue get-catalog --catalog-id s3tablescatalog
   ```

# S3 テーブルカタログでのデータベースとテーブルの作成
<a name="create-databases-tables-s3-catalog"></a>

 データベースを作成して Apache Iceberg テーブルを整理し、テーブルを作成して S3 テーブルカタログ内のデータのスキーマと場所を定義できます。

## データベースの作成 (コンソール)
<a name="w2aac13c27c25b5b1"></a>

1.  コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) を開き、データレイク管理者またはデータベース作成者としてサインインします。

1. ナビゲーションペインの **[データカタログ]** で **[データベース]** を選択します。

1. **[データベースの作成]** を選択します。

1.  **[データベースの作成]** ページで、**[データベース]** オプションを選択し、次の詳細を入力します。
   + **名前** – データベース用に一意の名前を入力します。
   + **データカタログ** – S3 テーブルカタログを選択します。データベースはこのカタログにあります。
   + **説明** – (オプション) 説明と場所を追加します。
   + **新しいテーブルの IAM アクセスコントロール** – オプションで、[このデータベース内の新しいテーブルには IAM アクセスコントロールのみを使用する] を選択します。このオプションの詳細については、「[データレイクのデフォルトセキュリティ設定の変更](https://docs.aws.amazon.com/lake-formation/latest/dg/change-settings.html)」を参照してください。
   + **[データベースを作成]** を選択します。S3 テーブルカタログの下に作成されたデータベースが表示されます。

## を使用してデータベースを作成する AWS CLI
<a name="w2aac13c27c25b5b3"></a>

次の CLI コマンドは、S3 テーブルカタログでデータベースを作成する方法を示しています。

```
aws glue create-database 
--region us-east-1 \
--catalog-id "123456789012:s3tablescatalog/test" \
--database-input \
 '{ "Name": "testglueclidbcreation" }'
```

## テーブルを作成する (AWS マネジメントコンソール)
<a name="w2aac13c27c25b5b5"></a>

 Lake Formation コンソールまたは AWS Glue `CreateTable` API を使用して、S3 テーブルカタログで Apache Iceberg メタデータテーブルを作成できます。

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) を開き、データレイク管理者または `CreateTable` アクセス許可を持つユーザーとしてサインインします。

1. ナビゲーションペインの [データカタログ] で、**[テーブル]** を選択します。

1. [テーブルの作成] を選択します。

1. **[テーブルの作成]** ページで、テーブルの詳細を入力します。  
![\[S3 テーブルカタログ\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/s3-catalog-create-table.png)
   + **テーブル名** – テーブルの一意の名前を入力します。
   + **カタログ** – カタログとして S3 テーブルカタログを選択します。
   + **データベース** – S3 テーブルカタログでデータベースを選択します。
   +  **説明** – テーブルの説明を入力します。
   + **スキーマ** - [列を追加] を選択して、列と、列のデータ型を追加します。空のテーブルを作成して、後でスキーマを更新することもできます。Iceberg では、テーブルを作成した後でスキーマとパーティションを進化させることができます。[Athena クエリ] を使用してテーブルスキーマを更新し、[Spark クエリ] を使用してパーティションを更新できます。

1. [**Submit**] を選択してください。

## テーブルを作成する (AWS CLI)
<a name="w2aac13c27c25b5b7"></a>

```
aws glue create-table \ 
--database-name "testglueclidbcreation" \ 
--catalog-id "123456789012:s3tablescatalog/test" \ 
--region us-east-1 \ 
--table-input \ 
'{ "Name": "testtablegluecli", "Parameters": { "format": "ICEBERG" }, "StorageDescriptor": { "Columns": [ {"Name": "x", "Type": "int", "Parameters": {"required": "true"}} ] } }'
```

# 別の AWS アカウントに Amazon S3 テーブルバケットを登録する
<a name="register-cross-account-s3-table-bucket"></a>

ある AWS アカウントから個々の Amazon S3 テーブルバケット (ARN 形式:`arn:aws:s3tables:us-east-1:account-id:bucket/bucket-name`) を別のアカウントの Lake Formation に登録できます。例えば、アカウント A のテーブルバケットをアカウント B の Lake Formation に登録できます。

## 前提条件
<a name="w2aac13c27c27b5"></a>

クロスアカウントバケット登録を開始する前に:
+ アカウント A でテーブルバケットを作成します。
+ バケット登録の適切なアクセス許可を持つ IAM ロールをアカウント B に作成します。

  Lake Formation にテーブルバケットを登録するために必要なアクセス許可の詳細については、「[Amazon S3 テーブルカタログを データカタログおよび Lake Formation と統合するための前提条件](s3tables-catalog-prerequisites.md)」を参照してください。
+ S3 テーブルカタログを作成するアカウントにテーブルバケットを登録します。
+  クロスアカウントアクセスの場合、テーブルバケットの登録時に指定されたロールは、クロスアカウントバケットにアクセスするための適切なアクセス許可を持つアカウント内ロールである必要があります。ロールには、バケットリソースにアクセスするために必要な S3 Tables IAM アクションが必要です。

## クロスアカウントテーブルバケット登録
<a name="w2aac13c27c27b7"></a>

次の手順では、アカウント A がリソース所有アカウントであり、アカウント B がアクセス許可を管理するためにテーブルバケットが登録される場所です。

1. アカウント A AWS マネジメントコンソール の にサインインします。

   Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1.  テーブルバケットを作成します。詳細については、「Amazon S3 ユーザーガイド」の「[デーブルバケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)」を参照してください。

1. アカウント B にテーブルバケットを登録します。

    AWS CLI を使用して、アカウント A のテーブルバケットをアカウント B の Lake Formation に登録します。

   ```
   aws lakeformation register-resource \
   --resource-arn 'arn:aws:s3tables:us-east-1:account-A-id:bucket/single-bucket-name' \
   --role-arn arn:aws:iam::account-B-id:role/role-name \
   --region us-east-1
   ```

   account-A-id、single-bucket-name、account-B-id、および role-name を特定の値に置き換えます。

1. 次に、アカウント B でテーブルバケットのカタログを作成します。

    AWS CLIを使用してカタログを作成します。

   ```
   aws glue create-catalog --region us-east-1 \
   --cli-input-json \
   '{
      "Name": "catalog-name",
      "CatalogInput" : {
         "FederatedCatalog": {
            "Identifier": "arn:aws:s3tables:us-east-1:account A:bucket/single-bucket-name",
            "ConnectionName": "aws:s3tables"
         },
         "CreateDatabaseDefaultPermissions": [],
         "CreateTableDefaultPermissions": []      
      }
   }'
   ```

   catalog-name、account-A-id、bucket-name を特定の値に置き換えます。

    次の CLI の例は、カタログの詳細を表示する方法を示しています。

   ```
    aws glue get-catalog \
     --catalog-id account-id:catalog-name \
     --region us-east-1
   ```

1. 次に、アカウント B で新しく作成されたカタログにデータベースとテーブルを作成します。

   データベースを作成します。

   ```
   aws glue create-database \
     --region us-east-1 \
     --catalog-id "account-B-id:catalog-name" \
     --database-input \
   '{
     "Name": "database-name"
   }'
   ```

   テーブルを作成します。

   ```
   aws glue create-table \
     --database-name database-name \
     --catalog-id account-B-id:catalog-name\
     --region us-east-1 \
     --table-input \
     '{
           "Name": "table-name",
           "Parameters": {
               "format": "ICEBERG"
           },
           "StorageDescriptor": {
              "Columns": [
           {"Name": "x", "Type": "int", "Parameters": {"required": "true"}}
             ]
           }
   }'
   ```

   database-name、account-B-id、catalog-name、table-name を特定の値に置き換えます。

1. 次の例は、カタログ内のオブジェクトを表示する方法を示しています。

   データベースの詳細を表示します。

   ```
   aws glue get-database \
     --name database-name \
     --catalog-id account-B-id:catalog-name \
     --region us-east-1
   ```

   テーブルの詳細を表示します。

   ```
   aws glue get-table \
     --name table-name \
     --database-name database-name \
     --catalog-id account-B-id:catalog-name \
     --region us-east-1
   ```

   database-name、account-B-id、catalog-name、table-name を特定の値に置き換えます。

# アクセス許可の付与
<a name="s3-tables-grant-permissions"></a>

 S3 テーブルを と統合したら AWS Lake Formation、S3 テーブルカタログとカタログオブジェクト (テーブルバケット、データベース、テーブル) に対するアクセス許可を、アカウントの他の IAM ロールとユーザーに付与できます。Lake Formation アクセス許可を使用すると、Amazon Redshift Spectrum や Athena などの統合分析エンジンのユーザーに対して、テーブル、列、行レベルの粒度でアクセスコントロールを定義できます。

 許可は、名前付きリソース方式、または Lake Formation のタグベースのアクセスコントロール (LF-TBAC) 方式を使用して付与することができます。LF タグと LF タグ式を使用してアクセス許可を付与する前に、それらを定義してデータカタログオブジェクトに割り当てる必要があります。

詳細については、「[メタデータアクセスコントロールのための LF タグの管理](managing-tags.md)」を参照してください。

外部 AWS アカウントに Lake Formation アクセス許可を付与することで、データベースとテーブルを外部アカウントと共有できます。ユーザーはその後、複数のアカウントにまたがるテーブルを結合してクエリするクエリとジョブを実行できるようになります。データカタログリソースを別のアカウントと共有すると、そのアカウント内のプリンシパルは、そのリソースをプリンシパルのデータカタログ内にあるかのように操作することができます。

データベースとテーブルを外部アカウントと共有すると、**スーパーユーザー**のアクセス許可は使用できません。

 アクセス許可を付与する詳細な手順については、「[Lake Formation 許可の管理](managing-permissions.md)」セクションを参照してください。

## AWS CLI Amazon S3 テーブルに対するアクセス許可の付与例
<a name="w2aac13c27c29c15"></a>

```
aws lakeformation grant-permissions \
--cli-input-json \
'{
    "Principal": {
        "DataLakePrincipalIdentifier":"arn:aws:iam::111122223333:role/DataAnalystRole"
    },
    "Resource": {
        "Table": {
            "CatalogId":"111122223333:s3tablescatalog/amzn-s3-demo-bucket1",
            "DatabaseName":"S3 table bucket namespace <example_namespace>",
            "Name":"S3 table bucket table name <example_table>"
        }
    },
    "Permissions": [
        "SELECT"
    ]
}'
```

 コマンドに含めるパラメータは次のとおりです。
+ DataLakePrincipalIdentifier – アクセス許可を付与する IAM ユーザー、ロール、またはグループ ARN
+ CatalogId – データカタログを所有する 12 桁の AWS アカウント ID
+ DatabaseName – Amazon S3 テーブルバケット名前空間の名前
+ Name – Amazon S3 テーブルバケットのテーブル名
+ Permissions – 付与するアクセス許可。オプション: SELECT、INSERT、DELETE、DESCRIBE、ALTER、DROP、ALLL、SUPER

# 共有 Amazon S3 Tables へのアクセス
<a name="s3-tables-cross-account-sharing"></a>

 S3 テーブルカタログのデータベースまたはテーブルに対するクロスアカウントアクセス許可を付与した後、リソースにアクセスするには、共有データベースとテーブルへのリソースリンクを作成する必要があります。

1.  送信先アカウント (共有リソースを受信するアカウント) で、データベースリソースリンクを作成します。詳細な手順については、「[共有 Data Catalog データベースへのリソースリンクの作成](create-resource-link-database.md)」を参照してください。

   データベースリソースリンクを作成するための CLI の例

   ```
   aws glue create-database 
   --region us-east-1 
   --catalog-id "111122223333" 
   --database-input \
   '{
     "Name": "s3table_resourcelink",
     "TargetDatabase": {
       "CatalogId": "011426214932:s3tablescatalog/chmni-s3-table-bucket-011426214932",
       "DatabaseName": "s3_table_ns"
     },
     "CreateTableDefaultPermissions": []
   }'
   ```

1.  テーブルに対するクロスアカウントアクセス許可を付与します。

   クロスアカウントアクセス許可付与の CLI の例

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:role/S3TablesTestExecRole"
       },
       "Resource": {
           "Table": {
               "CatalogId": "011426214932:s3tablescatalog/chmni-s3-table-bucket-011426214932",
               "DatabaseName": "s3_table_ns",
               "Name": "test_s3_iceberg_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

1.  リソースリンクに対する Lake Formation `DESCRIBE` アクセス許可を付与します。

    リソースリンクに対する describe アクセス許可を付与する CLI の例。

   ```
   aws lakeformation grant-permissions \
       --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:role/S3TablesTestExecRole
       --resource Database='{CatalogId=111122223333;, Name=s3table_resourcelink}' \
       --permissions DESCRIBE
   ```

# S3 Tables 統合のアクセスコントロールの変更
<a name="manage-s3tables-catalog-integration"></a>

Amazon S3 Tables を と統合したら AWS Glue Data Catalog、カタログリソースへのアクセスの制御方法を変更できます。このセクションでは、現在使用しているアクセスコントロールモデルと希望するアクセスコントロールモデルに応じてアクセスコントロールを変更する方法を説明します。Lake Formation を有効にすると、Lake Formation 許可を通じて列レベルや行レベルのセキュリティなどのきめ細かなアクセス許可を使用でき、Lake Formation は登録されたロールを通じてプリンシパルに代わって一時的な認証情報を提供できます。アクセスコントロール AWS Lake Formation を から IAM に変更すると、標準の IAM ポリシーへのアクセスコントロールが返されます。これは、ワークロードにきめ細かなアクセスが必要ではなく、IAM を通じてアクセス許可を完全に管理する場合に適しています。どちらの移行パスにも、データカタログのデフォルトの更新、Lake Formation によるリソース登録の調整、移行中のアクセス中断を回避するためのアクセス許可の付与の調整が含まれます。

**Topics**
+ [S3 Tables と Data Catalog の統合で Lake Formation を有効にする](change-access-iam-to-lf.md)
+ [アクセスコントロール AWS Lake Formation を から IAM に変更する](change-access-lf-to-iam.md)

# S3 Tables と Data Catalog の統合で Lake Formation を有効にする
<a name="change-access-iam-to-lf"></a>

このセクションでは、 と統合された Amazon S3 Tables の AWS Lake Formation 許可を使用して、アクセスコントロールを IAM 権限から IAM に移行するワークフローについて説明します AWS Glue Data Catalog。

**重要**  
 AWS Lake Formation アクセスコントロールを有効にすると、S3 Tables リソースへの既存の IAM ベースのアクセスがすべて取り消されます。ステップ 1 を完了すると、IAM アクセス許可を通じて以前にデータにアクセスしたユーザーとロールはすぐにアクセスできなくなります。ユーザーがデータを再度クエリできるようにするには、ステップ 2 で Lake Formation アクセス許可を付与する必要があります。メンテナンス期間中にこの移行を計画し、データチームと調整します。

## 前提条件
<a name="w2aac13c29b7b7"></a>

S3 Tables への読み取り/書き込みアクセスには、Lake Formation アクセス許可に加えて、プリンシパルにも `lakeformation:GetDataAccess` IAM アクセス許可が必要です。この許可があると、Lake Formation がデータにアクセスするための一時的な認証情報のリクエストを承諾します。

## の使用 AWS CLI
<a name="w2aac13c29b7b9"></a>

1. **ステップ 1: IAM ロールを使用してバケットを Lake Formation に登録する**

   S3 Tables リソースを Lake Formation に登録します。
**注記**  
既存のロールがある場合は、ハイブリッドアクセスが false であることを確認します。

   ```
   aws lakeformation register-resource \
     --resource-arn "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*" \
     --role-arn "arn:aws:iam::AWSAccountID:role/service-role/LFAccessRole" \
     --with-federation
   ```

1. **ステップ 2: AWS Glue カタログを更新して Lake Formation アクセスコントロールを有効にする**

   カタログを空の `CreateDatabaseDefaultPermissions`と `CreateTableDefaultPermissions` ( を に設定`[]`) で更新し、 `OverwriteChildResourcePermissionsWithDefault`を に設定します`Accept`。これにより、既存のすべての子リソースから IAM ベースのアクセスが削除され、カタログとそのオブジェクトが Lake Formation 許可を使用して管理できるようになります。

   ```
   aws glue update-catalog \
     --catalog-id "s3tablescatalog" \
     --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*",
           "ConnectionName": "aws:s3tables"
       },
       "CreateDatabaseDefaultPermissions": [],
       "CreateTableDefaultPermissions": [],
       "OverwriteChildResourcePermissionsWithDefault": "Accept",
       "AllowFullTableExternalDataAccess": "True"
     }'
   ```

1. **ステップ 3: データチームに Lake Formation アクセス許可を付与する**

   アクセスが必要なプリンシパル (ロール、ユーザー、またはグループ) に Lake Formation のアクセス許可を付与します。たとえば、フルテーブルの読み取りアクセスをロールに付与するには、次のようにします。

   ```
   aws lakeformation grant-permissions \
     --principal DataLakePrincipalIdentifier=arn:aws:iam::AWSAccountID:role/DataTeamRole \
     --resource '{
       "Table": {
           "CatalogId": "AWSAccountID",
           "DatabaseName": "s3tablescatalog/table-bucket-name/namespace",
           "TableWildcard": {}
       }
     }' \
     --permissions "SELECT" "DESCRIBE"
   ```

   必要に応じて、プリンシパルとリソースの組み合わせごとに繰り返します。

# アクセスコントロール AWS Lake Formation を から IAM に変更する
<a name="change-access-lf-to-iam"></a>

このセクションでは、 と統合された Amazon S3 Tables のアクセスコントロールを AWS Lake Formation 権限から IAM 権限に変更するワークフローについて説明します AWS Glue Data Catalog。

**重要**  
アクセスコントロールを AWS Lake Formation 権限から IAM に変更すると、S3 Tables リソースへの既存の Lake Formation ベースのアクセスはすべて取り消されます。ステップ 2 を完了すると、以前に Lake Formation 許可を通じてデータにアクセスしたユーザーとロールはすぐにアクセスできなくなります。カタログを更新する前に、ステップ 1 で IAM アクセスを許可する必要があります。メンテナンス期間中にこの移行を計画し、データチームと調整します。

**重要**  
Data Catalog オブジェクトを使用した列レベルのアクセスやデータセルフィルターなどのきめ細かなアクセスコントロールは、 AWS Lake Formation を使用する場合にのみ使用できます。アクセスコントロールを から IAM AWS Lake Formation に移行する前に、 を使用して既存の Lake Formation 許可を監査`aws lakeformation list-permissions`し、同等の IAM ポリシーがユーザーに必要なアクセスを提供できるかどうかを確認します。Lake Formation のきめ細かな許可に依存していたプリンシパルには、アクセスコントロールの移行後にテーブルレベルのフルアクセスが必要です。

## 前提条件
<a name="w2aac13c29b9b9"></a>

開始する前に、以下を確認してください。
+ 移行するリソースに対して現在有効なすべての Lake Formation 許可を特定しました。`aws lakeformation list-permissions --resource-type TABLE` を実行して確認します。
+ 影響を受けるすべてのプリンシパルに同等のアクセスを提供する IAM ポリシーを準備しました。
+ Lake Formation に登録された IAM ロールはまだ です `lakeformation:GetDataAccess` (ハイブリッド移行期間中に必要）。

## の使用 AWS CLI
<a name="w2aac13c29b9c11"></a>

1. **ステップ 1: プリンシパルに IAM アクセス許可を付与する**

   アクセスが必要なユーザーまたはロールに IAM ポリシーをアタッチします。ポリシーには、 AWS Glue メタデータアクセス許可と S3 Tables データアクセス許可の両方を含める必要があります。
**注記**  
次のポリシー例では、読み取りアクセスのみを提供します。

   ```
   aws iam put-user-policy \
     --user-name GlueIAMAccessUser \
     --policy-name S3TablesIAMAccessPolicy \
     --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "GlueMetadataAccess",
               "Effect": "Allow",
               "Action": [
                   "glue:GetCatalog",
                   "glue:GetDatabase",
                   "glue:GetTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:AWSAccountID:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:AWSAccountID:database/s3tablescatalog/table-bucket-name/namespace",
                   "arn:aws:glue:us-east-1:AWSAccountID:table/s3tablescatalog/table-bucket-name/namespace/*"
               ]
           },
           {
               "Sid": "S3TablesDataAccess",
               "Effect": "Allow",
               "Action": [
                   "s3tables:GetTableBucket",
                   "s3tables:GetTable",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/table-bucket-name",
                   "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/table-bucket-name/table/*"
               ]
           }
       ]
     }'
   ```

   先に進む前に、影響を受けるすべてのユーザーとロールが IAM 認証情報を使用して期待されるテーブルにアクセスできることを確認します。

1. **ステップ 2: カタログを更新して IAM のデフォルトのアクセス許可を復元する**

   カタログを更新して、 `CreateDatabaseDefaultPermissions`と を `ALL`に`CreateTableDefaultPermissions`付与します`IAM_ALLOWED_PRINCIPALS`。を `OverwriteChildResourcePermissionsWithDefault`に設定する`Accept`と、新しく作成された子リソースだけでなく、既存のすべての子リソースに変更が反映されます。

   ```
   aws glue update-catalog \
     --catalog-id "s3tablescatalog" \
     --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*",
           "ConnectionName": "aws:s3tables"
       },
       "CreateDatabaseDefaultPermissions": [{
           "Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"},
           "Permissions": ["ALL"]
       }],
       "CreateTableDefaultPermissions": [{
           "Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"},
           "Permissions": ["ALL"]
       }],
       "OverwriteChildResourcePermissionsWithDefault": "Accept"
     }'
   ```

1. **ステップ 3: Lake Formation からリソースの登録を解除する**

   すべてのアクセスが IAM ポリシーを通じて機能していること、および Lake Formation の許可に依存するプリンシパルがないことを確認したら、Lake Formation からリソースを登録解除して移行を完了できます。

   ```
   aws lakeformation deregister-resource \
     --resource-arn "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*"
   ```
**注記**  
リソースの登録を解除したら、不要になった IAM プリンシパル`lakeformation:GetDataAccess`から を削除します。

`revoke-permissions` ステップは必要ありません。

# での Amazon Redshift マネージドカタログの作成 AWS Glue Data Catalog
<a name="create-rms-catalog"></a>

 現在 Amazon Redshift プロデューサークラスターや Amazon Redshift データ共有は利用できない場合がありますが、 AWS Glue Data Catalogを使用して Amazon Redshift テーブルを作成および管理する必要があります。`glue:CreateCatalog` API または AWS Lake Formation コンソールを使用して AWS Glue マネージドカタログを作成するには、カタログタイプを `Catalog source` Redshift として設定`Managed`します。 ****この手順では、以下を実行します。
+ データカタログに新しいカタログを作成する
+ カタログを Lake Formation データの場所として登録する
+ Amazon Redshift マネージドサーバーレスワークグループを作成する
+ データ共有オブジェクトを使用して Amazon Redshift Serverless ワークグループとデータカタログをリンクする

**マネージドカタログを作成し、アクセス許可を設定するには (コンソール)**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. **[カタログの作成]** オプションを選択します。

1. **[カタログの設定]** の詳細ページで、次の情報を入力します。
   + **名前** – マネージドカタログの一意の名前。名前は変更できず、小文字にする必要があります。名前は最大 255 文字で、アカウント内で一意である必要があります。
   + **タイプ** – カタログタイプとして `Managed catalog` を選択します。
   + **ストレージ** – ストレージとして `Redshift` を選択します。
   + **説明** – データソースから作成されたカタログの説明を入力します。

1. Amazon EC2 での Amazon EMR で実行されている Apache Spark アプリケーションを使用して、 AWS Glue Data Catalogの Amazon Redshift データベースにアクセスできます。

   Apache Spark による Amazon Redshift マネージドストレージの読み取りや書き込みができるように、 AWS Glue は Amazon Redshift データウェアハウスのワークロードに影響を与えずに読み取り操作や書き込み操作を実行するために必要なコンピューティングリソースとストレージリソースを備えたマネージド Amazon Redshift クラスターを作成します。Amazon S3 バケットとの間でデータを転送するために必要なアクセス許可を持つ IAM ロールも指定する必要があります。データ転送ロールに必要なアクセス許可については、「[で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)」セクションの「ステップ 5」を参照してください。

1. デフォルトでは、Amazon Redshift クラスター内のデータは AWS マネージドキーを使用して暗号化されます。Lake Formation には、暗号化用のカスタム KMS キーを作成するオプションがあります。カスタマーマネージドキーを使用している場合は、特定のキーポリシーをキーに追加する必要があります。

1.  カスタマーマネージドキーを使用して Amazon Redshift マネージドストレージ内のデータを暗号化する場合は、[暗号化設定のカスタマイズ] を選択します。カスタムキーを使用するには、KMS キーにカスタムマネージドキーポリシーを追加する必要があります。詳細については、「[で Amazon Redshift 名前空間を管理するための前提条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)」を参照してください。

1. **暗号化オプション** – カスタムキーを使用してカタログを暗号化する場合は、**[暗号化設定のカスタマイズ]** オプションを選択します。カスタムキーを使用するには、KMS キーにカスタムマネージドキーポリシーを追加する必要があります。

1. **[次へ]** を選択して、他のプリンシパルにアクセス許可を付与します。

1. **[アクセス許可を付与]** ページで、**[アクセス許可を追加]** を選択します。

1.  **[アクセス許可を追加]** 画面で、プリンシパルと、付与するアクセス許可のタイプを選択します。  
![\[プリンシパルタイプと許可オプションを含むカタログアクセス許可ページ。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/catalog-permissions.png)
   +  **[Principals]** (プリンシパル) セクションでプリンシパルタイプを選択してから、アクセス許可の付与先となるプリンシパルを指定します。
     + **IAM ユーザーとロール** – IAM ユーザーとロールのリストから、ユーザーまたはロールを 1 つ以上選択します。
     + **SAML ユーザーとグループ** – SAML および Amazon Quick ユーザーとグループの場合は、SAML を介してフェデレーションされたユーザーまたはグループの 1 つ以上の Amazon リソースネーム (ARNs)、または Amazon Quick ユーザーまたはグループの ARNs を入力します。各 ARN の後で **[Enter]** キーを押します。

       ARNs AWS CLI 「コマンドの AWS CLI 付与と取り消し」を参照してください。
   +  **[Permissions]** (許可) セクションで、許可と付与可能な許可を選択します。

     **[カタログのアクセス許可]** で、付与するアクセス許可を 1 つ以上選択します。

     カタログ内のすべてのリソースに対する無制限の管理アクセス許可を付与するには、**[スーパーユーザー]** を選択します。

      **付与可能なアクセス**許可で、付与受信者が AWS アカウントの他のプリンシパルに付与できるアクセス許可を選択します。このオプションは、外部アカウントから IAM プリンシパルにアクセス許可を付与する場合はサポートされません。

1. **[次へ]** を選択して情報を確認し、カタログを作成します。**[カタログ]** リストには、新しいマネージドカタログが表示されます。

**フェデレーティッドカタログを作成するには (CLI)**
+  次の例は、フェデレーティッドカタログを作成する方法を示しています。

  ```
  aws glue create-catalog --cli-input-json file://input.json
  
  {
      "Name": "CatalogName", 
      "CatalogInput": {
        "Description": "Redshift published Catalog",
        "CreateDatabaseDefaultPermissions" : [],
        "CreateTableDefaultPermissions": [],
        "CatalogProperties": {
          "DataLakeAccessProperties" : {
            "DataLakeAccess" : "true",
            "DataTransferRole" : "DTR arn",
            "KMSKey": "kms key arn",  // Optional
            "CatalogType": "aws:redshift"
          }  
        }
      }
  }
  ```

  Glue get-catalog レスポンス 

  ```
  aws glue get-catalog \
    --catalog-id account-id:catalog-name \
    --region us-east-1
  
  Response:
  {
      "Catalog": {
          "Name": "CatalogName", 
          "Description": "Glue Catalog for Redshift z-etl use case",
          "CreateDatabaseDefaultPermissions" : [],
          "CreateTableDefaultPermissions": [],
           "CatalogProperties": {
            "DataLakeAccessProperties" : {
              "DataLakeAccess": "true",
              "DataTransferRole": "DTR arn",
              "KMSKey": "kms key arn",
              "ManagedWorkgroupName": "MWG name",
              "ManagedWorkgroupStatus": "MWG status",
              "RedshiftDatabaseName": "RS db name",
              "NamespaceArn": "namespace key arn",
              "CatalogType": "aws:redshift"
           }
         }
      }
  ```

# Amazon Redshift データ共有でのデータに対するアクセス許可の管理
<a name="data-sharing-redshift"></a>

AWS Lake Formation では、Amazon Redshift のデータ共有のデータを安全に管理できます。Amazon Redshift は、AWS クラウド内でのフルマネージド型、ペタバイト規模のデータウェアハウスサービスです。Amazon Redshift では、データ共有機能を使用して、AWS アカウント 間でデータを共有できます。Amazon Redshift データ共有の詳細については、「[Amazon Redshift でのデータ共有の概要](https://docs.aws.amazon.com/redshift/latest/dg/data_sharing_intro.html)」を参照してください。

Amazon Redshift では、プロデューサークラスター管理者がデータ共有を作成し、データレイク管理者と共有します。データレイク管理者を作成するための詳しい手順については、「[データレイク管理者を作成する](initial-lf-config.md#create-data-lake-admin)」を参照してください。

ユーザー (データレイク管理者) がデータ共有を承諾したら、特定のデータ共有用の AWS Glue Data Catalog データベースを作成する必要があります。これは、Lake Formation のアクセス許可を使用してアクセスを制御できるようにするためです。Lake Formation は、各データ共有を対応するデータカタログデータベースにマッピングします。これらはデータカタログにフェデレーションデータベースとして表示されます。

データカタログ外のエンティティを指すデータベースは、*フェデレーションデータベース*と呼ばれます。Amazon Redshift データ共有のテーブルとビューは、データカタログに個別のテーブルとして表示されます。フェデレーションデータベースは、同じアカウントまたは Lake Formation の別のアカウント内の、選択した IAM プリンシパルおよび SAML ユーザーと共有できます。行と列のフィルター式を含めて、特定データへのアクセスを制限することもできます。詳細については、「[Lake Formation でのデータフィルタリングとセルレベルのセキュリティ](data-filtering.md)」を参照してください。

 ユーザーに Amazon Redshift データ共有へのアクセスを提供するには、以下の操作を実行する必要があります。

1. **[Data Catalog settings]** (データカタログの設定) を更新して、Lake Formation アクセス許可を有効にします。

1. Amazon Redshift プロデューサークラスター管理者からのデータ共有の招待を承諾し、データ共有を Lake Formation に登録します。

   この手順を完了すると、Lake Formation データカタログ内でデータ共有を管理できるようになります。

1. フェデレーションデータベースを作成し、そのデータベースに対するアクセス許可を定義します。

1. データベースとテーブルに対するアクセス許可をユーザーに付与します。データベース全体またはテーブルのサブセットを、同じアカウント内または別のアカウント内のユーザーと共有できます。

制限事項については、「[Amazon Redshift データ共有の制限事項](notes-rs-datashare.md)」を参照してください。

**Topics**
+ [Amazon Redshift データ共有に対するアクセス許可設定の前提条件](redshift-ds-prereqs.md)
+ [Amazon Redshift データ共有に対するアクセス許可の設定](setup-ds-perms.md)
+ [フェデレーションデータベースのクエリ](qerying-fed-db.md)

# Amazon Redshift データ共有に対するアクセス許可設定の前提条件
<a name="redshift-ds-prereqs"></a>

**デフォルトのデータカタログ設定を更新します**  
データカタログリソースの Lake Formation アクセス許可を有効にするには、Lake Formation のデフォルトの **[Data Catalog settings]** (データカタログの設定) を無効にすることをお勧めします。詳細については、「[デフォルトのアクセス許可モデルを変更する、またはハイブリッドアクセスモードを使用する](initial-lf-config.md#setup-change-cat-settings)」を参照してください。

**アクセス許可の更新**  
 Lake Formation で Amazon Redshift データ共有を承諾するには、データレイク管理者アクセス許可 (`AWSLakeFormationDataAdmin`) に加えて、以下のアクセス許可も必要です。
+ `glue:PassConnection on aws:redshift`
+ `redshift:AssociateDataShareConsumer`
+ `redshift:DescribeDataSharesForConsumer`
+ `redshift:DescribeDataShares`

データレイク管理者 IAM ユーザーには、以下のアクセス許可が暗黙的に付与されます。
+ data\$1location\$1access
+ create\$1database 
+ lakefomation:registerResource

# Amazon Redshift データ共有に対するアクセス許可の設定
<a name="setup-ds-perms"></a>

 このトピックでは、データ共有への招待を承諾し、フェデレーションデータベースを作成し、アクセス許可を付与するために必要なステップについて説明します。Lake Formation コンソールまたは AWS Command Line Interface (AWS CLI) を使用できます。このトピックの例では、同じアカウントのプロデューサークラスター、データカタログ、およびデータコンシューマーを示しています。

Lake Formation のクロスアカウント機能の詳細については、「[Lake Formation でのクロスアカウントデータ共有](cross-account-permissions.md)」を参照してください。

**データ共有にアクセス許可を設定するには**

1. データ共有への招待を確認して承諾します。

------
#### [ Console ]

   1.  Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にデータレイク管理者としてサインインします。**[Data sharing]** (データ共有) ページに移動します。

   1. アクセスが許可されているデータ共有を確認します。**[Status]** (ステータス) 列は、データ共有の現在の参加ステータスを示します。**[Pending]** (保留中) ステータスは、ユーザーがデータ共有に追加されたが、招待を承諾または拒否していないことを示します。

   1.  データ共有の招待に応答するには、データ共有名を選択し、**[招待を確認]** を選択します。**[データ共有の承諾または拒否]** で、招待の詳細を確認します。**[Accept]** (承諾) を選択して招待を承諾するか、**[Reject]** (拒否) を選択して招待を却下します。招待を拒否した場合、データ共有にはアクセスできません。

------
#### [ AWS CLI ]

   以下の例では、招待を表示、承諾、登録する方法を示します。AWS アカウント ID は、有効な AWS アカウント ID に置き換えてください。`data-share-arn` を、データ共有を参照する実際の Amazon リソースネーム (ARN) に置き換えます。

   1. 保留中の招待を確認します。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
      ```

   1. データ共有の承諾

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
       --consumer-arn 'arn:aws:glue:us-east-1:111122223333:catalog
      ```

   1. Lake Formation アカウントにデータ共有を登録します。[RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API オペレーションを使用して、データ共有を Lake Formation に登録します。`DataShareArn` は `ResourceArn` の入力パラメータです。
**注記**  
これは必須の手順です。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds'
      ```

------

1. データベースを作成します。

    データ共有の招待を承諾したら、データ共有に関連付けられた Amazon Redshift データベースを指すデータベースを作成する必要があります。データベースを作成するには、データレイク管理者である必要があります。

------
#### [ Console ]

   1.  **[Invitations]** (招待) ペインからデータ共有を選択し、**[Set database details]** (データベース詳細の設定) を選択します。

   1.  **[Set database details]** (データベース詳細の設定) に、データ共有の固有の名前と ID を入力します。この ID は、メタデータ階層 (dbName.schema.table) でデータ共有を内部的にマッピングするために使用されます。

   1.  共有データベースとテーブルに対するアクセス許可を他のユーザーに付与するには、**[Next]** (次へ) を選択します。

------
#### [ AWS CLI ]

    次のサンプルコードを使用して、Lake Formation と共有されている Amazon Redshift データベースを指すデータベースを AWS CLI で作成します。

   ```
   aws glue create-database --cli-input-json \
   
   '{
    "CatalogId": "111122223333",
    "DatabaseInput": {
     "Name": "tahoedb",
     "FederatedDatabase": {
          "Identifier": "arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds",
          "ConnectionName": "aws:redshift"
      }
    }
    }'
   ```

------

1. アクセス許可を付与します。

    データベースを作成したら、アカウント内の他のユーザーや外部の AWS アカウントと組織にアクセス許可を付与できます。Amazon Redshift データ共有にマッピングされたフェデレーションデータベースには、データの書き込みアクセス許可 (挿入、削除) とメタデータのアクセス許可 (変更、ドロップ、作成) を付与することはできません。許可の付与の詳細については、「[Lake Formation 許可の管理](managing-permissions.md)」を参照してください。
**注記**  
データレイク管理者は、フェデレーションデータベース内のテーブルの表示のみを行うことができます。他のアクションを実行するには、それらのテーブルに対する他のアクセス許可を付与する必要があります。

------
#### [ Console ]

   1. **[Grant permissions]** (アクセス許可の付与) 画面で、アクセス許可を付与するユーザーを選択します。

   1. **[Grant]** (付与) を選択します。

------
#### [ AWS CLI ]

   以下の例を使用して、データベースとテーブルのアクセス許可を AWS CLI で付与します。

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
      "Principal": {
              "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
      },
      "Resource": {
             "Database": {
                   "CatalogId": "111122223333",
                    "Name": "tahoedb"
              }
       },
       "Permissions": [
                "DESCRIBE"
        ],
       "PermissionsWithGrantOption": [
                            
        ]
    }
   ```

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
                      "Principal": {
                             "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
                      },
                     "Resource": {
                            "Table": {
                                 "CatalogId": "111122223333",
                                 "DatabaseName": "tahoedb",
                                 "Name": "public.customer"
                          }
                     },
                    "Permissions": [
                           "SELECT"
                     ],
                    "PermissionsWithGrantOption": [
                            "SELECT"
                      ]
    }
   ```

------

# フェデレーションデータベースのクエリ
<a name="qerying-fed-db"></a>

 アクセス許可の付与後、ユーザーは Amazon Redshift を使用してサインインし、フェデレーションデータベースへのクエリを開始できます。これで、ユーザーはローカルデータベース名を使用して SQL クエリで Amazon Redshift データ共有を参照できるようになります。Amazon Redshift では、データ共有を介して共有されるパブリックスキーマの顧客テーブルには、データカタログの `public.customer` として作成される、対応するテーブルが作成されます。

1. Amazon Redshift を使用してフェデレーションデータベースにクエリを実行する前に、クラスター管理者は次のコマンドを使用してデータカタログデータベースからデータベースを作成します。

   ```
   CREATE DATABASE sharedcustomerdb FROM ARN 'arn:aws:glue:<region>:111122223333:database/tahoedb' WITH DATA CATALOG SCHEMA tahoedb
   ```

1.  クラスター管理者は、データベースでの使用に関するアクセス許可を付与します。

   ```
   GRANT USAGE ON DATABASE sharedcustomerdb TO IAM:user;
   ```

1.  これで、フェデレーションユーザーは SQL ツールにログインしてテーブルをクエリできます。

   ```
   Select * from sharedcustomerdb.public.customer limit 10;
   ```

 詳細については、「Amazon Redshift 管理ガイド」の「[AWS Glue Data Catalog のクエリ](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-glue.html)」を参照してください。

# 外部メタストアを使用するデータセットのアクセス許可の管理
<a name="data-sharing-hms"></a>

 AWS Glue Data Catalog メタデータフェデレーション (データカタログフェデレーション) を使用すると、データカタログを Amazon S3 データのメタデータを保存する外部メタストアに接続し、 を使用してデータアクセス許可を安全に管理できます AWS Lake Formation。メタデータを外部メタストアからデータカタログに移行する必要はありません。

データカタログは、一元化されたメタデータリポジトリを提供し、異種システム間でのデータの管理と発見を容易にします。組織がデータカタログ内のデータを管理する場合、 AWS Lake Formation を使用して Amazon S3 内のデータセットへのアクセスを制御できます。

**注記**  
現在、Apache Hive (バージョン 3 以降) メタストアフェデレーションのみをサポートしています。

データカタログフェデレーションを設定するには、 で [GlueDataCatalogFederation-HiveMetastore](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:766175011753:applications/GlueDataCatalogFederation-HiveMetastore) と呼ばれる AWS Serverless Application Model (AWS SAM) アプリケーションを提供します AWS Serverless Application Repository。

リファレンス実装は、[AWS Glue Data Catalog フェデレーション - Hive メタストア](https://github.com/awslabs/aws-glue-data-catalog-federation)のオープンソースプロジェクトとして GitHub で提供されています。

 AWS SAM アプリケーションは、データカタログを Hive メタストアに接続するために必要な次のリソースを作成してデプロイします。
+ ** AWS Lambda 関数** – データカタログと Hive metastore の間で通信するフェデレーションサービスの実装をホストします。 はこの Lambda 関数を AWS Glue 呼び出して、Hive メタストアからメタデータオブジェクトを取得します。
+ **Amazon API Gateway** – すべての呼び出しを Lambda 関数にルーティングするプロキシとして機能する Hive メタストアの接続エンドポイント。
+ **IAM ロール** - データカタログと Hive メタストア間の接続を作成するために必要なアクセス許可を持つロール。
+ **AWS Glue connection** – Amazon API Gateway エンドポイントと、エンドポイントを呼び出す IAM ロールを保存する AWS Glue 接続 Amazon API Gateway のタイプ。

テーブルをクエリすると、 AWS Glue サービスは Hive メタストアへのランタイム呼び出しを行い、メタデータを取得します。Lambda 関数は、Hive メタストアとデータカタログ間のトランスレータとして機能します。

接続を確立した後、Hive メタストアのメタデータをデータカタログと同期するために、Hive メタストア接続の詳細を使用してデータカタログに*フェデレーションデータベース*を作成し、このデータベースを Hive データベースにマッピングする必要があります。データベースは、データカタログ外のエンティティを指す場合、フェデレーションデータベースと呼ばれます。

タグベースのアクセスコントロールと名前付きリソースメソッドを使用して Lake Formation のアクセス許可をフェデレーティッドデータベースに適用し、複数 AWS アカウント、 AWS Organizations、および組織単位 (OUs) 間で共有できます。フェデレーションデータベースは、別のアカウントの IAM プリンシパルと直接共有することもできます。

 外部 Hive テーブルで Lake Formation データフィルターを使用すると、列レベル、行レベル、およびセルレベルできめ細かいアクセス許可を定義できます。Amazon Athena、Amazon Redshift、または Amazon EMR を使用して、Lake Formation が管理する外部 Hive テーブルにクエリを実行できます。

クロスアカウントデータ共有およびデータフィルタリングの詳細については、以下を参照してください。
+ [Lake Formation でのクロスアカウントデータ共有](cross-account-permissions.md)
+ [Lake Formation でのデータフィルタリングとセルレベルのセキュリティ](data-filtering.md)

**データカタログメタデータフェデレーションの手順の概要**

1.  AWS SAM アプリケーションをデプロイし、フェデレーションデータベースを作成するための適切なアクセス許可を持つ IAM ユーザーとロールを作成します。

1. 外部 Hive メタストアを使用するデータセットの `Enable Data Catalog federation` オプションを選択して、Amazon S3 のデータロケーションを Lake Formation に登録します。

1.  AWS SAM アプリケーション設定 (AWS Glue 接続名、Hive メタストアへの URL、Lambda 関数パラメータ) を設定し、 AWS SAM アプリケーションをデプロイします。

1.  AWS SAM アプリケーションは、外部 Hive メタストアをデータカタログに接続するために必要なリソースをデプロイします。

1. Hive データベースとテーブルに Lake Formation アクセス許可を適用するには、Hive メタストア接続の詳細を使用してデータカタログにデータベースを作成し、このデータベースを Hive データベースにマッピングします。

1. フェデレーションデータベースのアクセス許可を、自分のアカウントまたは別のアカウントのプリンシパルに付与します。

**注記**  
Lake Formation のアクセス許可を適用しなくても、データカタログを外部 Hive メスタストアに接続したり、フェデレーションデータベースを作成したり、Hive データベースやテーブルでクエリや ETL スクリプトを実行したりできます。Lake Formation に登録されていない Amazon S3 のソースデータの場合、アクセスは Amazon S3 の IAM アクセス許可ポリシーと AWS Glue アクションによって決まります。

制限事項については、「[Hive メタデータストアのデータ共有に関する考慮事項と制限事項](notes-hms.md)」を参照してください。

**Topics**
+ [ワークフロー](#hms-workflow)
+ [データカタログを Hive メタストアに接続するための前提条件](hms-prerequisites.md)
+ [データカタログを外部 Hive メタストアに接続する](hms-setup.md)
+ [その他のリソース](additional-resources-hms.md)

## ワークフロー
<a name="hms-workflow"></a>

次の図は、 AWS Glue Data Catalog を外部 Hive メタストアに接続するためのワークフローを示しています。

![\[Workflow diagram showing Hive metastore connection to AWS Glue Data Catalog with numbered steps.\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/hms-workflow.png)


1. プリンシパルは、Athena や Redshift Spectrum などの統合サービスを使用してクエリを送信します。

1. 統合サービスは、メタデータの Data Catalog を呼び出します。これにより、その背後で利用可能な Hive メタストアエンドポイントが呼び出され Amazon API Gateway、メタデータリクエストへの応答を受け取ります。

1. 統合サービスが Lake Formation にリクエストを送信し、テーブル情報とテーブルにアクセスするための認証情報を検証します。

1.  Lake Formation はリクエストを承認し、統合アプリケーションに一時的な認証情報を提供して、データアクセスを許可します。

1. 統合サービスが Lake Formation から受け取った一時的な認証情報を使用して Amazon S3 からデータを読み取り、結果をプリンシパルと共有します。

# データカタログを Hive メタストアに接続するための前提条件
<a name="hms-prerequisites"></a>

 AWS Glue Data Catalog を外部の Apache Hive メタストアに接続してデータアクセス許可を設定するには、次の要件を満たす必要があります。
**注記**  
Lake Formation 管理者が AWS SAM アプリケーションをデプロイし、特権ユーザーのみが Hive メタストア接続を使用して対応するフェデレーティッドデータベースを作成することをお勧めします。

1. 

**IAM ロールを作成します。**

**AWS SAM アプリケーションをデプロイするには**
   + Hive メタストアへの接続の作成に必要なリソース (Lambda 関数、 Amazon API Gateway、IAM ロール、および AWS Glue 接続) をデプロイするために必要なアクセス許可を持つロールを作成します。

**フェデレーションデータベースを作成するには**

   リソースに以下のアクセス許可が必要です。
   + `glue:CreateDatabase on resource arn:aws:glue:region:account-id:database/gluedatabasename`
   + `glue:PassConnection on resource arn:aws:glue:region:account-id:connection/hms_connection`

1. 

**Amazon S3 ロケーションを Lake Formation に登録します。**

   Lake Formation を使用してデータレイク内のデータを管理および保護するには、Hive メタストアのテーブルのデータを含む Amazon S3 ロケーションを Lake Formation に登録する必要があります。これにより、Lake Formation は Athena、Redshift Spectrum、Amazon EMR などの AWS 分析サービスに認証情報を提供できます。

   Amazon S3 ロケーションの登録の詳細については「[データレイクへの Amazon S3 ロケーションの追加](register-data-lake.md)」を参照してください。

   Amazon S3 ロケーションを登録するときに、**[データカタログフェデレーションを有効にする]** チェックボックスをオンにすると、Lake Formation がフェデレーションデータベースのテーブルにアクセスするロールを引き受けることができます。  
![\[Register location form for AWS Lake Formation with Amazon S3 path and IAM role options.\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/hms-register-s3.png)

   データロケーションに Lake Formation を登録する方法の詳細については、「[データレイク用の Amazon S3 ロケーションを設定する](initial-lf-config.md#register-s3-location)」を参照してください。

1. 

**適切な Amazon EMR バージョンを使用します。**

   Amazon EMR をフェデレーション Hive メタストアデータベースと共に使用するには、Hive バージョン 3.x 以降と Amazon EMR バージョン 6.x 以降が必要です。

# データカタログを外部 Hive メタストアに接続する
<a name="hms-setup"></a>

 AWS Glue Data Catalog を Hive メタストアに接続するには、[GlueDataCatalogFederation-HiveMetastore ](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:766175011753:applications/GlueDataCatalogFederation-HiveMetastore)という AWS SAM アプリケーションをデプロイする必要があります。外部 Hive メタストアをデータカタログに接続するために必要なリソースを作成します。で AWS SAM アプリケーションにアクセスできます AWS Serverless Application Repository。

 AWS SAM アプリケーションは、Lambda 関数を使用して Amazon API Gateway の背後にある Hive メタストアの接続を作成します。 AWS SAM アプリケーションは、ユーザーからの入力としてユニフォームリソース識別子 (URI) を使用し、外部の Hive メタストアをデータカタログに接続します。ユーザーが Hive テーブルでクエリを実行すると、データカタログは API ゲートウェイエンドポイントを呼び出します。エンドポイントは Lambda 関数を呼び出して、Hive テーブルのメタデータを取得します。

**データカタログを Hive メタストアに接続してアクセス許可を設定するには**

1. 

**AWS SAM アプリケーションをデプロイします。**

   1. にサインイン AWS マネジメントコンソール し、 を開きます AWS Serverless Application Repository。

   1. ナビゲーションペインで、[**Available applications**] (利用可能なアプリケーション) を選択します。

   1. **[パブリックアプリケーション]** を選択します。

   1. **[Show apps that create custom roles or resource policies]** (カスタム IAM ロールまたはリソースポリシーを作成するアプリを表示する) オプションを選択します。

   1. 検索ボックスに、**[GlueDataCatalogFederation-HiveMetastore]** という名前を入力します。

   1. **[GlueDataCatalogFederation-HiveMetastore]** アプリケーションを選択します。

   1. **[アプリケーション設定]** で、Lambda 関数に最低限必要な次の設定を入力します。
      + **アプリケーション名** - AWS SAM アプリケーションの名前。
      + **[GlueConnectionName]** - 接続の名前。
      + **[HiveMetastoreURIs]** - Hive メタストアホストの URI。
      + **[LambdaMemory]** - Lambda メモリ量 (MB 単位)。128～10240。デフォルトは 1024 です。
      + **[LambdaTimeout]** - Lambda 呼び出しの最大ランタイム (秒単位)。デフォルトは 30 です。
      + **[VPCSecurityGroupIds]** と **[VPCSubnetIds]** - Hive メタストアが存在する VPC の情報。

   1. **[I acknowledge that this app creates custom IAM roles and resource policies]** (このアプリがカスタム IAM ロールとリソースポリシーを作成することを承認します) を選択します。詳細については、**[Info]** (情報) リンクを選択してください。

   1. **[Application settings]** (アプリケーションの設定) セクションの右下で **[Deploy]** (デプロイ) を選択します。デプロイが完了すると、Lambda 関数が Lambda コンソールの [**リソース**] セクションに表示されます。

    アプリケーションは Lambda にデプロイされます。その名前の先頭には、アプリケーションが AWS Serverless Application Repositoryからデプロイされたことを示す **serverlessrepo-** が付けられます。アプリケーションを選択すると、デプロイされたアプリケーションの各リソースが一覧表示される **[リソース]** ページに移動します。リソースには、データカタログと Hive メタストア間の通信を許可する Lambda 関数、 AWS Glue 接続、およびデータベースフェデレーションに必要なその他のリソースが含まれます。

1. 

**データカタログでフェデレーションデータベースを作成する**

   Hive メタストアへの接続を作成したら、外部 Hive メタストアデータベースを指すフェデレーションデータベースをデータカタログ内に作成できます。データカタログに接続する Hive メタストアデータベースごとに、対応するデータベースをデータカタログ内に作成する必要があります。

------
#### [ Lake Formation console ]

   1. **[データ共有]** ページで、**[共有データベース]** タブを選択し、**[データベースの作成]** を選択します。

   1. **[接続名]** で、ドロップダウンメニューから Hive メタストア接続の名前を選択します。

   1. 一意のデータベース名とデータベースのフェデレーションソース識別子を入力します。これは、テーブルをクエリするときに SQL ステートメントで使用する名前です。名前は最大 255 文字で、アカウント内で一意である必要があります。

   1. **[データベースの作成]** を選択します。

------
#### [ AWS CLI ]

   ```
   aws glue create-database \
   '{
    "CatalogId": "<111122223333>",
     "database-input": {
       "Name":"<fed_glue_db>",
       "FederatedDatabase":{
           "Identifier":"<hive_db_on_emr>",
           "ConnectionName":"<hms_connection>"
        }
      }
    }'
   ```

------

1. 

**フェデレーションデータベース内のテーブルを表示します。**

   フェデレーションデータベースを作成したら、Lake Formation コンソールまたは AWS CLIを使用して Hive メタストア内のテーブルのリストを表示できます。

------
#### [ Lake Formation console ]

   1. **[共有データベース]** タブからデータベース名を選択します。

   1. **[データベース]** ページで、**[テーブルの表示]** を選択します。

------
#### [ AWS CLI ]

   次の例は、接続定義、データベース名、データベース内の一部またはすべてのテーブルを取得する方法を示しています。データカタログの ID を、データベースの作成に使用した有効な AWS アカウント ID に置き換えます。`hms_connection` を接続名に置き換えます。

   ```
   aws glue get-connection \
   --name <hms_connection>  \       
   --catalog-id 111122223333
   ```

   ```
   aws glue get-database \
   --name <fed_glu_db> \             
   --catalog-id 111122223333
   ```

   ```
   aws glue get-tables \
   --database-name <fed_glue_db> \
   --catalog-id 111122223333
   ```

   ```
   aws glue get-table \
   --database-name <fed_glue_db> \
   --name <hive_table_name> \
   --catalog-id 111122223333
   ```

------

1. 

**アクセス許可を付与します。**

    データベースを作成したら、アカウントの他の IAM ユーザーとロール、または外部 AWS アカウント と組織にアクセス許可を付与できます。フェデレーションデータベースには、データの書き込みアクセス許可 (挿入、削除) とメタデータのアクセス許可 (変更、ドロップ、作成) を付与することはできません。許可の付与の詳細については、「[Lake Formation 許可の管理](managing-permissions.md)」を参照してください。

1. 

**フェデレーションデータベースのクエリ**

   アクセス許可の付与後、ユーザーは Athena および Amazon Redshift を使用してサインインし、フェデレーションデータベースへのクエリを開始できます。これで、ユーザーはローカルデータベース名を使用して SQL クエリで Hive データベースを参照できるようになります。

   ** Amazon Athena クエリ構文の例**

   `fed_glue_db` は、前の手順で作成したローカルデータベース名に置き換えます。

    `Select * from fed_glue_db.customers limit 10;`

# その他のリソース
<a name="additional-resources-hms"></a>

以下のブログ記事には、Hive メタストアデータベースとテーブルに Lake Formation 許可を設定し、Athena を使用してクエリを実行する方法の詳細が記載されています。また、プロデューサーアカウント A の Lake Formation プリンシパルが、LF タグを使用してフェデレーション Hive データベースとテーブルをコンシューマーアカウント B と共有する、クロスアカウント共有のユースケースについても説明します。
+ [アクセス AWS Lake Formation 許可を使用して Apache Hive メタストアをクエリする](https://aws.amazon.com/blogs/big-data/query-your-apache-hive-metastore-with-aws-lake-formation-permissions/)