デフォルトのApacheHBase構成では、誰もがシステムで使用可能なすべてのテーブルからの読み取りと書き込みを行うことができます。多くの企業の設定では、この種のポリシーは受け入れられません。
管理者は、HBaseとの通信を許可するマシンを決定するファイアウォールを設定できます。ただし、ファイアウォールを通過できるマシンは、引き続きすべてのテーブルからの読み取りとすべてのテーブルへの書き込みが許可されます。この種のメカニズムは効果的ですが、HBaseは同じクライアントマシンを使用する複数のユーザーを区別できず、HBaseテーブル、列ファミリー、または列修飾子アクセスに関する粒度がまだないため、不十分です。
この投稿では、KerberosをHadoopおよびHBaseとともに使用して、ユーザー認証を提供する方法について説明します。 、およびHBaseがユーザー認証を実装する方法 指定されたデータセットに対する特定のアクションのアクセス許可をユーザーに付与します。
Secure HBase:認証と承認
安全なHBaseは、スニファー、認証されていない/許可されていないユーザー、およびネットワークベースの攻撃から保護することを目的としています。誤ってすべてのデータを削除してしまう許可されたユーザーからは保護されません。
HBaseは、ユーザー認証を提供するように構成できます。 、これにより、許可されたユーザーのみがHBaseと通信できるようになります。承認システムはRPCレベルで実装され、(他の認証メカニズムの中でも)KerberosをサポートするSimple Authentication and Security Layer(SASL)に基づいています。 SASLを使用すると、接続ごとに認証、暗号化ネゴシエーション、メッセージの整合性を検証できます(「hbase.rpc.protection」構成プロパティ)。
ユーザー認証を有効にした後の次のステップ 管理者に、特定のアクションを許可または拒否する一連のユーザー承認ルールを定義する機能を提供することです。アクセスコントローラーコプロセッサーまたはアクセス制御リスト(ACL)とも呼ばれる承認システムは、HBase 0.92(CDH4)以降で利用可能であり、テーブル/ファミリーを使用して承認ポリシー(読み取り/書き込み/作成/管理)を定義する機能を提供します。 /qualifierの粒度。指定されたユーザーの場合。
Kerberos
Kerberosはネットワーク化された認証プロトコルです。これは、秘密鍵暗号化を使用して、クライアント/サーバーアプリケーションに強力な認証を提供するように設計されています。 Kerberosプロトコルは、強力な暗号化(AES、3DESなど)を使用して、クライアントが安全でないネットワーク接続を介してサーバーに対してそのIDを証明できるようにします(またはその逆)。クライアントとサーバーがKerberosを使用してIDを証明した後、すべての通信を暗号化して、ビジネスを行う際のプライバシーとデータの整合性を確保することもできます。
チケット交換プロトコル
大まかに言えば、Kerberosを使用してサービスにアクセスするには、各クライアントは次の3つの手順に従う必要があります。
- Kerberos認証:クライアントはKerberos認証サーバーに対して自身を認証し、チケット許可チケット(TGT)を受け取ります。
- Kerberos認証:クライアントはチケット付与サーバーにサービスチケットを要求します。サービスチケットは、要求とともに送信されたクライアントTGTが有効な場合にチケットとセッションキーを発行します。
- サービスリクエスト:クライアントはサービスチケットを使用して、クライアントが使用しているサービス(HDFS、HBaseなど)を提供しているサーバーに対して自身を認証します。
HBase、HDFS、ZooKeeper SASL
HBaseはHDFSとZooKeeperに依存しているため、安全なHBaseは安全なHDFSと安全なZooKeeperに依存しています。つまり、HBaseサーバーは、HDFSおよびZooKeeperと通信するために、上記のように安全なサービスセッションを作成する必要があります。
HBaseによって書き込まれたすべてのファイルはHDFSに保存されます。 Unixファイルシステムと同様に、HDFSによって提供されるアクセス制御は、ユーザー、グループ、およびアクセス許可に基づいています。 HBaseによって作成されたすべてのファイルにはユーザーとして「hbase」がありますが、このアクセス制御はシステムによって提供されたユーザー名に基づいており、マシンにアクセスできるすべてのユーザーがユーザー「hbase」として「sudo」できる可能性があります。 Secure HDFSは、「hbase」ユーザーが信頼できることを保証する認証手順を追加します。
ZooKeeperには、各znodeにアクセス制御リスト(ACL)があり、HDFSと同様の方法で、ユーザー情報に基づいてユーザーへの読み取り/書き込みアクセスを許可します。
HBase ACL
ユーザーがKerberosを介して認証されたので、受け取ったユーザー名は信頼できるユーザーの1人であると確信しています。これでは十分な粒度ではない場合があります。指定したユーザーがテーブルを読み書きできるように制御する必要があります。そのために、HBaseは、指定されたユーザーのアクセスを制限できる承認メカニズムを提供します。
この機能を有効にするには、アクセスコントローラーコプロセッサーをマスターおよびリージョンサーバーコプロセッサークラスの下のhbase-site.xmlに追加して有効にする必要があります。 (ここでHBaseセキュリティ構成をセットアップする方法を参照してください。)
コプロセッサーは、各HBaseリージョンサーバーやマスター内で実行されるコードです。ほとんどの操作(put、get、delete、…)を傍受し、操作の実行前および/または実行後に任意のコードを実行することができます。
この機能を使用して、各操作の前にコードを実行することで、Access Controllerコプロセッサーはユーザー権限を確認し、ユーザーが操作を実行できるかどうかを判断できます。
HBaseシェルには、管理者がユーザー権限を管理できるようにするコマンドがいくつかあります。
-
grant [table] [family] [qualifier]
revoke [table] [family] [qualifier]
ご覧のとおり、管理者には、テーブルスキーマに基づいてユーザーアクセスを制限する機能があります。
- User-WにTable-X/Family-Yの読み取り権限のみを付与します(
grant 'User-W', 'R', 'Table-X', 'Family-Y'
) - User-WにQualifier-Zに対する完全な読み取り/書き込み権限を付与します(
grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z'
)
管理者は、テーブルの作成、リージョンのバランス調整、クラスターのシャットダウンなど、クラスターレベルで動作するグローバル権限を付与することもできます。
- User-Wにテーブルを作成する機能を付与します(
grant 'User-W', 'C'
) - User-Wにクラスターを管理する機能を付与します(
grant 'User-W', 'A'
)
すべての権限は、AccessControllerコプロセッサーによって作成された_acl_というテーブルに保存されます。このテーブルの主キーは、grantコマンドで指定するテーブル名です。 _acl_テーブルには1つの列ファミリーしかなく、各修飾子は特定のテーブル/ユーザーの権限の粒度を示します。値には、付与された実際の権利が含まれています。
ご覧のとおり、HBaseシェルコマンドはデータの保存方法と密接に関連しています。 grantコマンドは1行を追加または更新し、revokeコマンドは_acl_テーブルから1行を削除します。
内部のアクセスコントローラー
前述のように、Access Controllerコプロセッサーは、各ユーザーリクエストをインターセプトする機能を使用して、ユーザーが操作を実行する権限を持っているかどうかを確認します。
操作ごとに、Access Controllerは_acl_テーブルにクエリを実行して、ユーザーが操作を実行する権限を持っているかどうかを確認する必要があります。
ただし、この操作はパフォーマンスに悪影響を与える可能性があります。この問題を解決する解決策は、永続性のために_acl_テーブルを使用し、権利検索を高速化するためにZooKeeperを使用することです。各リージョンサーバーはメモリに_acl_テーブルを読み込み、ZkPermissionWatcherから変更の通知を受け取ります。このように、すべてのリージョンサーバーは毎回更新された値を持ち、各権限チェックはメモリ内のマップを使用して実行されます。
ロードマップ
Kerberosは安定した、十分にテストされ、実績のある認証システムですが、HBase ACL機能は依然として非常に基本的であり、そのセマンティクスは進化しています。 HBASE-6096 は、ACL機能のv2で出荷されるすべての改善点のリファレンスとしての包括的なJIRAです。
承認とアクセス制御に関するもう1つの未解決のトピックは、KeyValueごとのセキュリティシステム( HBASE-6222 )の実装です。 )これにより、セキュリティタグに関連付けられた同じセルに異なる値を設定できるようになります。これにより、ユーザーの権限に基づいて特定の情報を表示できるようになります。
結論
HBase Securityには、スニファやその他のネットワーク攻撃からデータを保護し(Kerberosを使用してユーザーを認証し、サービス間の通信を暗号化することにより)、ユーザー承認ポリシーを定義し、操作を制限し、データの可視性を制限する2つの機能が追加されています。特定のユーザー。
Matteo Bertozziは、Spotifyのソフトウェアエンジニアであり、ClouderaのHBaseコンサルタントです。