レンジャーの中国の定義は「庭の管理者」です。その名前が示すように、ApacheRangerはHadoopガーデンの管理者の責任を引き受けました。Rangerは、一元化されたセキュリティ管理フレームワークを提供します。ユーザーは、Rangerコンソールを操作して、HDFS、Hive、HBase、YarnなどのHadoopエコロジカルコンポーネントへのきめ細かいデータアクセス制御を実現することにより、さまざまなポリシーを構成できます。
Apache Rangerの公式ウェブサイトによると、Rangerは主に次の機能を実装しています。
(1)統合された集中管理インターフェイスまたはRESTインターフェイスを介してすべてのセキュリティタスクを管理し、それによって集中セキュリティ管理を実現します。
(2)統合された集中管理インターフェイスを介して、Hadoopコンポーネント/ツールのきめ細かい操作/動作レベル制御;
(3)統一された標準化された認証方法を提供します;
(4)役割ベースのアクセス制御、属性ベースのアクセス制御およびその他のアクセス制御方法を
サポートします; (5)ユーザーアクセスおよび(およびセキュリティ)をサポートします(関連)管理業務の集中監査。
現在、レンジャーの最新バージョンは2.1.0で、広く使用されているバージョンは1.2.0です。
(1)レンジャーのアーキテクチャ
Rangerは、主に次の3つのコンポーネントで構成されています。
(1)Ranger Admin:Ranger AdminはRangerのコアモジュールであり、Web管理ページが組み込まれており、ユーザーはこのWeb管理インターフェイスまたはRESTインターフェイスを介してセキュリティポリシーを策定できます。
(2)エージェントプラグイン:エージェントプラグインは、Hadoopエコロジカルコンポーネントに組み込まれたプラグインであり、レンジャー管理者から定期的にポリシーを取得して実行し、監査のために操作レコードを記録します。
(3)ユーザー同期:ユーザー同期は、オペレーティングシステムのユーザー/グループ(ユーザー/グループ)の権限データをレンジャーデータベースに同期します。
それらの関係を次の図に示します。
(2)レンジャーのワークフロー
Ranger Adminは、ApacheRangerとユーザー間のメインインターフェイスです。ユーザーがRangerAdminにログインすると、Hadoopコンポーネントごとに異なるセキュリティポリシーを作成できます。ポリシーを作成して保存した後、エージェントプラグインは定期的に(デフォルトでは30秒)、コンポーネントによって構成されたすべてのポリシーをRanger Adminから取得し、キャッシュします。地元へ。このように、ユーザーがHadoopコンポーネントのデータサービスを要求すると、エージェントプラグインは認証サービスを提供し、認証結果を対応するコンポーネントにフィードバックして、データサービスの権限制御機能を実現します。ユーザーがRangerAdminで構成ポリシーを変更すると、エージェントプラグインは新しいポリシーをプルして更新します。ユーザーがレンジャー管理で構成ポリシーを削除すると、エージェントプラグインの認証サービスを引き続き使用できなくなります。
例としてHiveを取り上げます。Hiveは、開発者が独自の認証ポリシーを実装するための2つのインターフェイス、つまりorg.apache.hadoop.hive.ql.security.authorization.plugin.HiveAuthorizerFactoryとorg.apache.hadoop.hive.ql.security.authorization.pluginを提供します。 .HiveAuthorizer。その中で、HiveAuthorizerFactoryは、HiveAuthorizerの関連インスタンスを生成するために使用されます。HiveAuthorizerが初期化されると、PolicyRefresherスレッドが開始され、Ranger AdminからすべてのHive関連ポリシーが定期的にプルされ、ローカルの一時jsonファイルが書き込まれてキャッシュが更新され、承認が必要な場合はキャッシュされたポリシーに従って直接承認されます。具体的なプロセスを次の図に示します。
(3)レンジャーの操作とメンテナンスの戦闘
人、役割、権限は、常にシステムの設計と運用および保守の重要な領域です。人員、役割、権限の関係の完全なセットが確立されていない場合、「違法なユーザー」はシステムのリソースやデータに簡単にアクセスしたり、改ざんしたりする可能性があります。「ユーザー/ユーザーグループ」を使用して権限を設定するだけのUnix / Linuxシステムと比較して、Apache Rangerは、よりユーザーフレンドリーで操作しやすいWebページを提供して、人員、役割、および権限の関係の完全なセットを確立します。許可されたユーザーは、許可されたリソースとデータに合法的にアクセスでき、許可されていない「違法なユーザー」は完全に「判明」します。
さらに、レンジャーは、他のユーザーの一時的な承認を実現するための一時的なポリシーの作成もサポートしています。一時的に承認されたユーザーが関連する操作を完了すると、これらの一時的なポリシーが削除されるため、ユーザーの一時的な承認を便利かつ迅速に実現できます。
例としてHDFSを取り上げます。RangerAdminでServicesManagerを選択し、HDFSコンポーネントをクリックしてHDFSポリシー編集ページに入ります。以下に示すように:
[新しいポリシーの追加]ボタンをクリックすると、セキュリティポリシーの作成を開始できます。実際の実稼働環境で、私たちが策定した特定のセキュリティ戦略を次の図に示します。
上の図からわかるように、この戦略は、アプリケーションシステムのadminやtest0822-2などのユーザーが、HDFSコンポーネントの/ user、/ user / rangerpath /、/ user / rangerpath / data、/ user / rangerpath / data / alldayにアクセスできるようにすることです。パスを待機し、パスの下でコマンドを実行する戦略。ポリシーを作成したときに再帰スイッチをオンにしなかったため、ユーザーは/ userディレクトリにアクセスできますが、ディレクトリの次のレベルにアクセスする権限があるという保証はありません。したがって、これらのユーザーが順番にアクセスできる特定のディレクトリを指定しました。
次の図に示すように、[監査]タブでは、システムログインレコード、ポリシー認証レコード、エージェントプラグインステータスなどの監査およびステータス情報を明確に確認できます。
レンジャーのハイブのサポートも非常に完全です。テーブルレベルのアクセス制御をサポートするだけでなく、フィールドレベルのアクセス制御に改良することもできます。同時に、レンジャーはフィールドレベルの暗号化と行レベルのフィルタリングもサポートしています。これらの方法は、一時的な承認中に一時的なユーザーのアクセス権を制限するのに非常に適しています。
Hive戦略の策定方法は、基本的にHDFSと同じです。私たちが開発したアクセス戦略を次の図に示します。
[マスキング]タブで、フィールドレベルの暗号化戦略を策定できます。以下に示すように:
上の図で、私たちが策定した戦略は、グループに属する湿ったユーザーが、foodmartデータベースのcustomerテーブルのlnameフィールドの実際のデータを見るのを防ぐことです。このフィールドのデータは、湿ったユーザーにハッシュ値の形式で表示されます。dampがこのテーブルにアクセスすると、彼のクエリの結果が次の図に示されます。
[行レベルのフィルター]タブでは、行レベルのフィルター戦略を策定できます。次の図に示すように、湿ったユーザーが顧客テーブルのfnameがシェリのレコードであることを確認できないようにするという簡単な戦略を開発しました。
現時点では、湿ったユーザーは顧客テーブルfname = 'Sheri'のレコードを見ることができません。
Rangerは、Usersyncコンポーネントを介してオペレーティングシステムのユーザーをハイブコンポーネントに同期することに注意してください。したがって、Hiveコンポーネントのポリシーを構成する場合、正常に構成するには、Hive管理者に対応するオペレーティングシステムアカウントでRangerAdminにログインする必要があります。それ以外の場合は、次のプロンプトが表示されます。
(4)レンジャー戦略のバッチ操作
情報化プロセスの加速と深化に伴い、情報システムの適用範囲は徐々に拡大し、情報システムのユーザー数も増加し、ユーザー権限の需要が高まっています。また、ビッグデータ思考が徐々に普及し、データへの一時的なアクセスの需要も高まっています。従来の手動による方法でセキュリティポリシーを1つずつ追加すると、膨大な人員の浪費が発生し、エラーが発生しやすくなります。このシナリオに対応して、javaプログラムを使用して、レンジャーのセキュリティポリシーをバッチで追加、削除、変更、およびチェックします。これにより、運用と保守の効率が大幅に向上します。
まず、RangerApiにアクセスするための基本クラスを実装します。コードは次のとおりです。
public ApiResult execRangerApi(String url, String method, String requestBody) {
HadoopConfig.Ranger ranger = this.hadoop.getRanger();
String baseUrl = ranger.getApiBaseUrl();
String user = ranger.getUser();
String password = ranger.getPassword();
String fullUrl = baseUrl + url;
String auth = user + ":" + password;
String authInfo = DatatypeConverter.printBase64Binary(auth.getBytes());
HttpRequest request = null;
if (method.equalsIgnoreCase("GET")) {
request = HttpRequest.get(fullUrl);
} else if (method.equalsIgnoreCase("POST")) {
request = HttpRequest.post(fullUrl);
} else if (method.equalsIgnoreCase("PUT")) {
request = HttpRequest.put(fullUrl);
} else if (method.equalsIgnoreCase("DELETE")) {
request = HttpRequest.delete(fullUrl);
}
((HttpRequest)((HttpRequest)((HttpRequest)request.header("Authorization", "Basic " + authInfo))
.header("Accept", "application/json"))
.header("Content-Type", "application/json"))
.header("X-XSRF-HEADER", "valid");
if (requestBody != null && !requestBody.isEmpty())
request.body(requestBody);
HttpResponse response = request.execute();
ApiResult result = new ApiResult(this);
result.setHttpCode(response.getStatus());
result.setBodyRaw(response.body());
return result;
}
この基本クラスに基づいて、レンジャー戦略を追加、削除、変更、および照会するための実装クラスをさらに設計できます。基本コードは次のとおりです。
public void savePolicy(String policyName, List<String> paths, boolean isPathAdd, String appUser, List<PolicyAccess> accesses, boolean isReclusive) {
ApiResult result = null;
Policy policy = getPolicyByName(policyName);
......
Gson gson = new Gson();
if (isNewPolicy) {
logger.info("create policy, content:" + gson.toJson(policy));
result = execRangerApi("/public/v2/api/policy/", "POST", gson.toJson(policy));
if (result.getHttpCode() != 200)
throw new DMCException(String.format("create policy failed! ranger return : %d, %s", new Object[] { Integer.valueOf(result.getHttpCode()), result.getBodyRaw() }));
logger.info("create policy ok! " + policyName);
} else {
logger.info("edit policy, content:" + gson.toJson(policy));
result = execRangerApi("/public/v2/api/policy/" + policy.getId(), "PUT", gson.toJson(policy));
if (result.getHttpCode() != 200)
throw new DMCException(String.format("edit policy failed! ranger return : %d, %s", new Object[] { Integer.valueOf(result.getHttpCode()), result.getBodyRaw() }));
logger.info("edit policy ok! " + policyName);
}
}
最後に、作成したセキュリティポリシーをcurlコマンドを介してRanger Adminに渡して、セキュリティポリシーのバッチ処理を実現できます。参照コマンドは次のとおりです。
curl -H "Content-Type:application/json" -H "X-Token:token-name" -X POST "http://web-url&appUser=user-name" -d"[\"ranger-policy"]"
要約すると、Apache Rangerは、さまざまなセキュリティ戦略をより適切に実装するのに役立つ豊富なHadoopコンポーネントを提供します。同時に、レンジャー戦略のカスタマイズは便利で、速く、理解しやすく、「使用後に焼き付ける」ことができます。これは、一時的な承認シナリオに非常に適しています。Hadoopエコシステムが拡大し続けるにつれて、レンジャーはますます多くの運用および保守担当者に支持され、使用されると信じる理由があります。
参考資料:
1. http://ranger.apache.org/
2. ZTE ZTE、レンジャーのトレーニング教材
元のテキストは次のとおりです:http://dwz-9.cn/3p42b