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 認証の種類。 |
|
Hive metastore サービスの Kerberos プリンシパル。 |
|
Presto が Hive metastore サービスに接続する際に使用する Kerberos プリンシパル。 |
|
Hive metastore クライアント keytab の場所。 |
|
メタストアのエンドユーザーインパーソネーションを有効にします。 |
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を実行するクラスタ内のすべてのノードに配布する必要があります。
HDFS認証¶
Kerberized Hadoopクラスタでは、PrestoはKerberosを使用してHDFSに認証されます。HDFSのKerberos認証は、次のプロパティを使用してコネクタのプロパティファイルで構成されます。
プロパティ名 |
説明 |
---|---|
|
HDFS認証タイプ。可能な値は |
|
HDFSエンドユーザーのなりすましを有効にします。 |
|
PrestoがHDFSに接続する際に使用するKerberosプリンシパル。 |
|
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を実行するクラスタ内のすべてのノードに配布する必要があります。
HDFSワイヤ暗号化¶
HDFSワイヤ暗号化が有効になっているKerberized Hadoopクラスタでは、hive.hdfs.wire-encryption.enabled
プロパティを使用してPrestoがHDFSにアクセスできるようにできます。
プロパティ名 |
説明 |
---|---|
|
HDFSワイヤ暗号化を有効にします。可能な値は |
注記
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を実行するクラスタ内のすべてのノードに配布する必要があります。
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コネクタの認可チェックを有効にします。このプロパティは、次のいずれかの値である必要があります。
プロパティ値 |
説明 |
---|---|
|
ほとんどの操作が許可されるため、いくつかの認可チェックのみが適用されます。 |
|
|
|
Hive構成プロパティ |
|
ユーザーは、SQL標準に従って必要な権限を持っている限り、操作を実行できます。このモードでは、PrestoはHiveメタストアに定義されている権限に基づいてクエリに対する認可チェックを適用します。これらの権限を変更するには、GRANTコマンドとREVOKEコマンドを使用します。詳細については、SQL標準に基づく認可を参照してください。 |
|
ユーザーは、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
(必須):SELECT
、INSERT
、DELETE
、OWNERSHIP
、GRANT_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ポリシーを設定する必要があります。
スキーマの一覧表示、テーブルメタデータの表示、セッションプロパティの設定へのアクセスは、デフォルトで有効になっています。
設定プロパティ¶
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
Ranger RESTサービスのURLアドレス。Kerberos認証はまだサポートされていません。 |
|
|
キャッシュされたポリシーが更新される間隔 |
60秒 |
|
Ranger Hiveプラグインサービス名 |
|
|
Basic HTTP認証用に設定されたRanger Hiveプラグインユーザー名。 |
|
|
Basic HTTP認証用に設定されたRanger Hiveプラグインパスワード。 |
|
|
Ranger監査設定 - Ranger監査ファイルパス |
|
|
Ranger SSL設定 - クライアントキーストアファイルパス |
|
|
Ranger SSL設定 - クライアントキーストアパスワード |
|
|
Ranger SSL設定 - クライアントトラストストアファイルパス |
|
|
Ranger SSL設定 - クライアントトラストストアパスワード |