Hive セキュリティ設定

認証

Hive コネクタのデフォルトのセキュリティ設定では、Hadoop クラスタへの接続時に認証を使用しません。すべてのクエリは、どのユーザーがクエリを送信したかに関係なく、Presto プロセスを実行しているユーザーとして実行されます。

Hive コネクタは、Kerberosを使用するように設定された Hadoop クラスタをサポートするための追加のセキュリティオプションを提供します。

HDFSにアクセスする場合、Prestoはクエリを実行しているエンドユーザーをインパーソネーションできます。これは、HDFS の権限とACLと共に使用して、データに対する追加のセキュリティを提供できます。

警告

Hadoop サービスに Kerberos 認証を使用する場合は、Kerberos を使用して Presto コオーディネーターへのアクセスを保護する必要があります。Presto コオーディネーターへのアクセスを保護しないと、Hadoop クラスタ上の機密データへの不正アクセスにつながる可能性があります。

コオーディネーター Kerberos 認証およびCLI Kerberos 認証を参照して、Kerberos 認証の設定に関する情報を確認してください。

Kerberos サポート

kerberos認証を使用する Hadoop クラスタで Hive コネクタを使用するには、Hadoop クラスタ上の2つのサービスと連携するようにコネクタを設定する必要があります。

  • Hive metastore Thrift サービス

  • Hadoop Distributed File System (HDFS)

Hive コネクタによるこれらのサービスへのアクセスは、一般的な Hive コネクタ設定を含むプロパティファイルで設定されます。

注記

krb5.conf の場所が /etc/krb5.conf と異なる場合は、jvm.config ファイルで java.security.krb5.conf JVM プロパティを使用して明示的に設定する必要があります。

例:-Djava.security.krb5.conf=/example/path/krb5.conf

Hive Metastore Thrift サービス認証

Kerberized Hadoop クラスタでは、Presto は SASL を使用して Hive metastore Thrift サービスに接続し、Kerberos を使用して認証を行います。メタストアの Kerberos 認証は、次のプロパティを使用してコネクタのプロパティファイルで設定されます。

プロパティ名

説明

hive.metastore.authentication.type

Hive metastore 認証の種類。

hive.metastore.service.principal

Hive metastore サービスの Kerberos プリンシパル。

hive.metastore.client.principal

Presto が Hive metastore サービスに接続する際に使用する Kerberos プリンシパル。

hive.metastore.client.keytab

Hive metastore クライアント keytab の場所。

hive.metastore-impersonation-enabled

メタストアのエンドユーザーインパーソネーションを有効にします。

hive.metastore.authentication.type

NONE または KERBEROS のいずれか。デフォルト値の NONE を使用すると、Kerberos 認証は無効になり、他のプロパティを設定する必要はありません。

KERBEROS に設定すると、Hive コネクタは SASL を使用して Hive metastore Thrift サービスに接続し、Kerberos を使用して認証を行います。

このプロパティはオプションです。デフォルトは NONE です。

hive.metastore.service.principal

Hive metastore サービスの Kerberos プリンシパル。Presto コオーディネーターはこれを使用して Hive metastore を認証します。

このプロパティ値には _HOST プレースホルダーを使用できます。Hive metastore に接続すると、Hive コネクタは接続している **メタストア** サーバーのホスト名を代入します。これは、メタストアが複数のホストで実行される場合に便利です。

例:hive/hive-server-host@EXAMPLE.COM または hive/_HOST@EXAMPLE.COM

このプロパティはオプションです。デフォルト値はありません。

hive.metastore.client.principal

Presto が Hive metastore に接続する際に使用する Kerberos プリンシパル。

このプロパティ値には _HOST プレースホルダーを使用できます。Hive metastore に接続すると、Hive コネクタは Presto が実行されている **ワーカー** ノードのホスト名を代入します。これは、各ワーカーノードに独自の Kerberos プリンシパルがある場合に便利です。

例:presto/presto-server-node@EXAMPLE.COM または presto/_HOST@EXAMPLE.COM

このプロパティはオプションです。デフォルト値はありません。

警告

hive.metastore.client.principal で指定されたプリンシパルは、hive/warehouse ディレクトリ内のファイルとディレクトリを削除するのに十分な権限を持っている必要があります。プリンシパルが持たない場合、メタデータのみが削除され、データはディスク容量を消費し続けます。

これは、Hive metastore が内部テーブルデータを削除するためです。メタストアが Kerberos 認証を使用するように設定されている場合、メタストアによって実行されるすべての HDFS 操作はインパーソネーションされます。データの削除に失敗しても、エラーは無視されます。

hive.metastore.client.keytab

hive.metastore.client.principal で指定されたプリンシパルのキーを含む keytab ファイルへのパス。このファイルは、Presto を実行しているオペレーティングシステムユーザーが読み取れる必要があります。

このプロパティはオプションです。デフォルト値はありません。

NONE 認証の例

hive.metastore.authentication.type=NONE

Hiveメタストアのデフォルトの認証タイプはNONEです。NONEの場合、Prestoはセキュリティ保護されていないHiveメタストアに接続します。Kerberosは使用されません。

Kerberos認証を使用した構成例

hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/hive-metastore-host.example.com@EXAMPLE.COM
hive.metastore.client.principal=presto@EXAMPLE.COM
hive.metastore.client.keytab=/etc/presto/hive.keytab

HiveメタストアThriftサービスの認証タイプがKERBEROSの場合、Prestoはプロパティhive.metastore.client.principalで指定されたKerberosプリンシパルとして接続します。Prestoはhive.metastore.client.keytabプロパティで指定されたkeytabを使用してこのプリンシパルを認証し、メタストアのIDがhive.metastore.service.principalと一致することを検証します。

Keytabファイルは、Prestoを実行するクラスタ内のすべてのノードに配布する必要があります。

Keytabファイルに関する追加情報。

HDFS認証

Kerberized Hadoopクラスタでは、PrestoはKerberosを使用してHDFSに認証されます。HDFSのKerberos認証は、次のプロパティを使用してコネクタのプロパティファイルで構成されます。

プロパティ名

説明

hive.hdfs.authentication.type

HDFS認証タイプ。可能な値はNONEまたはKERBEROSです。

hive.hdfs.impersonation.enabled

HDFSエンドユーザーのなりすましを有効にします。

hive.hdfs.presto.principal

PrestoがHDFSに接続する際に使用するKerberosプリンシパル。

hive.hdfs.presto.keytab

HDFSクライアントkeytabの場所。

hive.hdfs.authentication.type

NONE または KERBEROS のいずれか。デフォルト値の NONE を使用すると、Kerberos 認証は無効になり、他のプロパティを設定する必要はありません。

KERBEROSに設定されている場合、HiveコネクタはKerberosを使用してHDFSに認証されます。

このプロパティはオプションです。デフォルトは NONE です。

hive.hdfs.impersonation.enabled

エンドユーザーのHDFSなりすましを有効にします。

セクションエンドユーザーのなりすましは、HDFSなりすましの詳細な説明を示しています。

このプロパティはオプションです。デフォルトはfalseです。

hive.hdfs.presto.principal

PrestoがHDFSに接続する際に使用するKerberosプリンシパル。

このプロパティ値には_HOSTプレースホルダーを使用できます。HDFSに接続する場合、HiveコネクタはPrestoが実行されている**ワーカー**ノードのホスト名を置換します。これは、各ワーカーノードに独自のKerberosプリンシパルがある場合に役立ちます。

例:presto-hdfs-superuser/presto-server-node@EXAMPLE.COMまたはpresto-hdfs-superuser/_HOST@EXAMPLE.COM

このプロパティはオプションです。デフォルト値はありません。

hive.hdfs.presto.keytab

hive.hdfs.presto.principalで指定されたプリンシパルのキーを含むkeytabファイルへのパス。このファイルは、Prestoを実行しているオペレーティングシステムユーザーが読み取れる必要があります。

このプロパティはオプションです。デフォルト値はありません。

NONE認証を使用した構成例

hive.hdfs.authentication.type=NONE

HDFSのデフォルトの認証タイプはNONEです。NONEの場合、PrestoはHadoopの単純な認証メカニズムを使用してHDFSに接続します。Kerberosは使用されません。

Kerberos認証を使用した構成例

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.presto.principal=hdfs@EXAMPLE.COM
hive.hdfs.presto.keytab=/etc/presto/hdfs.keytab

認証タイプがKERBEROSの場合、Prestoはhive.hdfs.presto.principalプロパティで指定されたプリンシパルとしてHDFSにアクセスします。Prestoはhive.hdfs.presto.keytab keytabで指定されたkeytabを使用してこのプリンシパルを認証します。

Keytabファイルは、Prestoを実行するクラスタ内のすべてのノードに配布する必要があります。

Keytabファイルに関する追加情報。

HDFSワイヤ暗号化

HDFSワイヤ暗号化が有効になっているKerberized Hadoopクラスタでは、hive.hdfs.wire-encryption.enabledプロパティを使用してPrestoがHDFSにアクセスできるようにできます。

プロパティ名

説明

hive.hdfs.wire-encryption.enabled

HDFSワイヤ暗号化を有効にします。可能な値はtrueまたはfalseです。

注記

Prestoのインストール構成によっては、ワイヤ暗号化を使用するとクエリ実行のパフォーマンスに影響を与える可能性があります。

エンドユーザーのなりすまし

HDFSへのアクセスにおけるなりすまし

Prestoは、クエリを実行しているエンドユーザーになりすますことができます。コマンドラインインターフェースからクエリを実行しているユーザーの場合、エンドユーザーはPresto CLIプロセスに関連付けられたユーザー名、またはオプションの--userオプションの引数です。HDFSのアクセス許可やACLが使用されている場合、エンドユーザーになりすますことで、HDFSへのアクセス時に追加のセキュリティを提供できます。

HDFSのアクセス許可とACLについては、HDFS Permissions Guideを参照してください。

NONE認証とHDFSなりすまし

hive.hdfs.authentication.type=NONE
hive.hdfs.impersonation.enabled=true

なりすましとNONE認証を使用する場合、PrestoはHDFSにアクセスする際にクエリを実行しているユーザーになりすまします。Prestoが実行されているユーザーは、このユーザーになりすますことが許可されている必要があります(セクションHadoopでのなりすましを参照)。Kerberosは使用されません。

なりすましを使用したKerberos認証

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=presto@EXAMPLE.COM
hive.hdfs.presto.keytab=/etc/presto/hdfs.keytab

なりすましとKERBEROS認証を使用する場合、PrestoはHDFSにアクセスする際にクエリを実行しているユーザーになりすまします。hive.hdfs.presto.principalプロパティで指定されたプリンシパルは、このユーザーになりすますことが許可されている必要があります(セクションHadoopでのなりすましを参照)。Prestoはhive.hdfs.presto.keytabで指定されたkeytabを使用してhive.hdfs.presto.principalを認証します。

Keytabファイルは、Prestoを実行するクラスタ内のすべてのノードに配布する必要があります。

Keytabファイルに関する追加情報。

Hiveメタストアへのアクセスにおけるなりすまし

Prestoは現在、Hiveメタストアへのアクセス時にエンドユーザーになりすますことをサポートしていません。

Hadoopでのなりすまし

NONE認証とHDFSなりすましまたはなりすましを使用したKerberos認証を使用するには、Prestoが実行されているユーザーまたはプリンシパルがPrestoにログインするユーザーになりすますことを許可するように、Hadoopクラスタを構成する必要があります。Hadoopでのなりすましは、core-site.xmlファイルで構成されます。構成オプションの完全な説明は、Hadoopドキュメントにあります。

Keytabファイルに関する追加情報

Keytabファイルには、プリンシパルをKerberos KDCに認証するために使用される暗号化キーが含まれています。これらの暗号化キーは安全に保管する必要があります。ssh秘密キーを保護する場合と同じ注意を払って保護する必要があります。

特に、keytabファイルへのアクセスは、実際に認証のためにそれらを使用する必要があるアカウントに制限する必要があります。実際には、これはPrestoプロセスが実行されるユーザーです。keytabファイルの所有権とアクセス許可は、他のユーザーがファイルの読み取りまたは変更できないように設定する必要があります。

Keytabファイルは、Prestoを実行しているすべてのノードに配布する必要があります。一般的な展開状況では、Hiveコネクタの構成はすべてのノードで同じになります。つまり、keytabはすべてのノードで同じ場所に存在する必要があります。

配布後、すべてのノードでkeytabファイルに正しいアクセス許可が設定されていることを確認する必要があります。

認可

Hiveカタログプロパティファイルでhive.securityプロパティを設定することにより、Hiveコネクタの認可チェックを有効にします。このプロパティは、次のいずれかの値である必要があります。

プロパティ値

説明

legacy(デフォルト値)

ほとんどの操作が許可されるため、いくつかの認可チェックのみが適用されます。hive.allow-drop-tablehive.allow-rename-tablehive.allow-add-columnhive.allow-drop-columnhive.allow-rename-columnなどの構成プロパティが使用されます。

read-only

SELECTなど、データまたはメタデータを読み取る操作は許可されますが、CREATEINSERTDELETEなど、データまたはメタデータに書き込む操作は許可されません。

file

Hive構成プロパティsecurity.config-fileで指定された構成ファイルを使用して認可チェックが適用されます。詳細については、ファイルベースの認可を参照してください。

sql-standard

ユーザーは、SQL標準に従って必要な権限を持っている限り、操作を実行できます。このモードでは、PrestoはHiveメタストアに定義されている権限に基づいてクエリに対する認可チェックを適用します。これらの権限を変更するには、GRANTコマンドとREVOKEコマンドを使用します。詳細については、SQL標準に基づく認可を参照してください。

ranger

ユーザーは、Ranger Hiveサービスで設定された認可ポリシーに従って操作を実行できます。Rangerベースの認可 を参照してください。

SQL標準ベースの認可

sql-standard セキュリティが有効になっている場合、PrestoはHiveと同じSQL標準ベースの認可を適用します。

PrestoのROLE構文のサポートはSQL標準に準拠していますが、HiveはSQL標準に完全に準拠していないため、以下の制限と違いがあります。

  • CREATE ROLE role WITH ADMINはサポートされていません。

  • CREATE ROLEまたはDROP ROLEを実行するには、adminロールを有効にする必要があります。

  • GRANT role TO user GRANTED BY someoneはサポートされていません。

  • REVOKE role FROM user GRANTED BY someoneはサポートされていません。

  • デフォルトでは、adminを除くユーザーのすべてのロールは、新しいユーザーセッションで有効になります。

  • SET ROLE roleを実行することにより、特定のロールを選択できます。

  • SET ROLE ALLは、adminを除くユーザーのすべてのロールを有効にします。

  • adminロールは、SET ROLE adminを実行して明示的に有効にする必要があります。

ファイルベースの認可

設定ファイルはJSONを使用して指定され、3つのセクションで構成されます。各セクションは、設定ファイルに指定された順序で照合されるルールの一覧です。ユーザーには、最初に一致したルールから権限が付与されます。正規表現は、指定されていない場合、デフォルトで.*になります。

スキーマルール

これらのルールは、スキーマの所有者と見なされるユーザーを管理します。

  • user(オプション):ユーザー名と照合する正規表現。

  • schema(オプション):スキーマ名と照合する正規表現。

  • owner(必須):所有権を示すブール値。

テーブルルール

これらのルールは、特定のテーブルに付与される権限を管理します。

  • user(オプション):ユーザー名と照合する正規表現。

  • schema(オプション):スキーマ名と照合する正規表現。

  • table(オプション):テーブル名と照合する正規表現。

  • privileges(必須):SELECTINSERTDELETEOWNERSHIPGRANT_SELECTの0個以上。

セッションプロパティルール

これらのルールは、セッションプロパティを設定できるユーザーを管理します。

  • user(オプション):ユーザー名と照合する正規表現。

  • property(オプション):セッションプロパティ名と照合する正規表現。

  • allowed(必須):このセッションプロパティを設定できるかどうかを示すブール値。

例を以下に示します。

{
  "schemas": [
    {
      "user": "admin",
      "schema": ".*",
      "owner": true
    },
    {
      "user": "guest",
      "owner": false
    },
    {
      "schema": "default",
      "owner": true
    }
  ],
  "tables": [
    {
      "user": "admin",
      "privileges": ["SELECT", "INSERT", "DELETE", "OWNERSHIP"]
    },
    {
      "user": "banned_user",
      "privileges": []
    },
    {
      "schema": "default",
      "table": ".*",
      "privileges": ["SELECT"]
    }
  ],
  "sessionProperties": [
    {
      "property": "force_local_scheduling",
      "allow": true
    },
    {
      "user": "admin",
      "property": "max_split_size",
      "allow": true
    }
  ]
}

Rangerベースの認可

Apache Rangerは、集中型のセキュリティ管理を提供するために広く使用されているフレームワークです。Rangerはさまざまなコンポーネントプラグインをサポートしており、コンポーネントと統合することで認可ポリシーの管理と検証を可能にします。Ranger Hiveプラグインは、BeelineなどのHiveクライアントの認可を拡張するために使用されます。Hiveコネクタ用のPresto Rangerプラグインは、Rangerをアクセス制御システムとして統合し、Ranger Hiveコンポーネントで定義されたポリシーで構成されたPresto Hiveコネクタクエリに対する認可を実行できます。クエリがPrestoに送信されると、Prestoはクエリを解析して分析し、ユーザーがスキーマやテーブルなどのオブジェクトにアクセスするために必要な権限を理解します。これらのオブジェクトの一覧が作成されると、PrestoはRangerサービスと通信して、リクエストが有効かどうかを判断します。リクエストが有効な場合、クエリは実行を続けます。ユーザーがオブジェクトをクエリするのに必要な権限を持っていないためリクエストが無効な場合、エラーが返されます。パフォーマンスを向上させるために、RangerポリシーはPrestoにキャッシュされます。

認証は、LDAPなどを使用してRangerの外側で処理され、Rangerは認証されたユーザーとユーザーグループを使用してポリシー定義に関連付けます。

要件

Apache Rangerとの統合のためにPrestoを設定する前に、以下の前提条件を確認してください。

Prestoコーディネーターとワーカーは、Rangerサービスと通信するための適切なネットワークアクセス権限を持っています。通常はポート6080です。

Apache Ranger 2.1.0以降を使用する必要があります。

ポリシー

ポリシーは、リソースのセットと関連付けられた権限の組み合わせです。Rangerは、これらのアクセス制御ポリシーを作成および管理するためのユーザーインターフェース、またはオプションとしてREST APIを提供します。

ユーザー、グループ、ロール

Apache Rangerには、ユーザー、グループ、ロールが設定された認証システムからApache Rangerにソースされるユーザーグループ同期メカニズムがあります。

サポートされている認可

Ranger Hiveサービスでは、スキーマ、テーブル、列レベルで権限を設定できます。特定のユーザーとグループへのアクセスを制限するには、明示的な拒否条件を使用してRangerポリシーを設定する必要があります。

スキーマの一覧表示、テーブルメタデータの表示、セッションプロパティの設定へのアクセスは、デフォルトで有効になっています。

設定プロパティ

プロパティ名

説明

デフォルト

hive.ranger.rest-endpoint

Ranger RESTサービスのURLアドレス。Kerberos認証はまだサポートされていません。

hive.ranger.refresh-policy-period

キャッシュされたポリシーが更新される間隔

60秒

hive.ranger.policy.hive-servicename

Ranger Hiveプラグインサービス名

hive.ranger.service.basic-auth-username

Basic HTTP認証用に設定されたRanger Hiveプラグインユーザー名。

hive.ranger.service.basic-auth-password

Basic HTTP認証用に設定されたRanger Hiveプラグインパスワード。

hive.ranger.audit.path

Ranger監査設定 - Ranger監査ファイルパス

ranger.http-client.key-store-path

Ranger SSL設定 - クライアントキーストアファイルパス

ranger.http-client.key-store-password

Ranger SSL設定 - クライアントキーストアパスワード

ranger.http-client.trust-store-path

Ranger SSL設定 - クライアントトラストストアファイルパス

ranger.http-client.trust-store-password

Ranger SSL設定 - クライアントトラストストアパスワード