

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

# 外部メタストアを使用するデータセットのアクセス許可の管理
<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/)