著者: Xiaoyu Yao
本ブログ記事は「https://blog.cloudera.com/apache-hadoop-ozone-security-authentication/」(2020/3/24投稿)の日本語翻訳記事です。
Apache Ozoneは、Hadoop分散データストアサービスの上に構築された分散オブジェクトストアです。他の分散ファイルシステムでは処理が難しい、数十億の大小のファイルを管理できます。Ozoneは、Amazon S3、Kubernetes CSI、ネイティブのHadoopファイルシステムAPIなどの豊富なAPIをサポートしています。これにより、Apache Hive上のデータウェアハウス(注:このリンクは追って修正)、Apache Nifiを使用したデータの取り込み、Apache Spark / Flinkを使用したストリーミング、Tensorflowを使用した機械学習など、さまざまな種類のビッグデータのワークロードでOzoneを簡単に利用できます。
データの増大とさまざまなグループ間のコラボレーションを必要とする多種多様なワークロードに伴い、データのセキュリティは最も重要になっています。コミュニティからの貢献により、Apache Hadoop Ozone 0.4.0リリース以降、Ozoneにセキュリティが追加されました。また、ClouderaのCDP Data Center 7.0のリリースには技術プレビューとして含まれています。セキュリティは、認証、認可、監査、暗号化の4つの構成要素に分類できます。このブログでは認証の部分について、フォローアップ記事では残りの部分について説明します。
認証は、Ozoneのコンポーネントがユーザーの身元を認識するプロセスです。OzoneはApache Hadoopのセキュリティアーキテクチャーと互換性があり、Kerberosとセキュリティトークンを使用した強力な認証をサポートしています。
Kerberosベースの認証
下の図1に示すように、OM(Ozone Manager)、SCM(Storage Container Manager)、DataNodeなどのサービスコンポーネントはすべて、Kerberosを介して相互認証されます。各サービスは、有効なKerberosプリンシパル名とkeytabファイルで構成する必要があります。これらは、サービスがセキュアモードでサービスを開始したときにログインするために使用されます。OM / SCM / DataNode のKerberos構成の詳細についてはApache Hadoop Ozoneのドキュメントを参照してください。同様に、Ozoneのクライアントは、メタデータ用のOzone Managerや、ブロックの読み取り/書き込み用のDataNodeなどのようなOzoneのサービスにアクセスするために、有効なKerberosチケットまたはセキュリティトークンを提供する必要があります。
セキュリティトークン
Hadoopのデリゲーショントークン(Delegation Token)と同様に、Ozoneのセキュリティトークンには、発行者からの署名とともにトークン識別子があります。Ozone managerは、Kerberosで認証されたユーザーまたはクライアントアプリケーションに対してデリゲーショントークンとブロックトークンを発行します。トークンの署名は、発行者の身元を確認するためにトークン検証者によって検証できます。このように、有効なトークン所有者はトークンを使用して、発行者のKerberosチケットがあるかのようにクラスターサービスに対して操作を実行できます。
Ozone Managerによって発行されたデリゲーショントークンにより、トークンの所有者は、ボリュームの作成やバケット内のオブジェクトの一覧表示など、Ozone Managerが提供するメタデータサービスにアクセスできます。デリゲーショントークンを使用してクライアントからリクエストを受信すると、Ozone Managerは、公開鍵を介して署名者の署名をチェックすることにより、デリゲーショントークンを検証します。取得、更新、キャンセルなどのデリゲーショントークン操作は、Kerberos認証接続でのみ実行できます。
ブロックトークンは、Ozone Managerによって発行/署名されるという意味で、デリゲーショントークンと似ています。これらは、クライアント要求がDataNodeでのブロック読み取りまたは書き込みを含むときにOzone Managerによって発行されます。明示的なget / renew / cancel APIでリクエストされたデリゲーショントークンとは異なり、これらは、キー/ブロックの場所の情報とともにクライアントに透過的に渡されます。ブロックトークンは、署名されたOzone Managerの公開鍵を使用してクライアントから読み取り/書き込みリクエストを受信すると、DataNodeによって検証されます。ブロックトークンは、クライアントが明示的に更新することはできません。有効期限が切れると、クライアントは新しいブロックトークンを取得するためにキー/ブロックの場所を再フェッチする必要があります。
S3シークレット
Ozoneは、Ozone S3 Gatewayを介してAmazon S3プロトコルをサポートしています。セキュアモードでは、Ozone Managerは、S3 APIを使用してOzoneにアクセスするKerberos認証ユーザーまたはクライアントアプリケーションにs3シークレットを発行します。これについてはOzone S3 Gatewayに関する後のブログで説明します。
Ozone セキュリティトークンはどのように機能するか?
図2に示すように、従来のApache Hadoopのデリゲーショントークンとブロックトークンは、トークンの発行者とトークン検証者の間の共有鍵を元にして、トークンに署名して検証します。したがって、発行者と検証者が異なる場合、たとえば、ブロックトークンの場合、共有マスターキーを定期的にネットワーク経由で転送して、トークン発行者(NameNode)とトークン検証者(DataNode)の間で同期する必要があります。
代わりに、Ozoneセキュリティトークンは証明書ベースのアプローチを採用しています。図3に示すように、トークン発行者とトークン検証者を証明書ベースの署名で完全に分離します。この方法では、共有鍵がネットワーク経由で転送されることがないため、トークンはより安全です。
セキュアモードでは、SCMは自身をCA(認証局)として立ち上げ、自己署名CA証明書を作成します。DataNodeとOzone Managerは、CSR(証明書署名要求)を介してSCM CAに登録する必要があります。SCMは、Kerberosを介してDataNodeおよびOzone Managerの身元を検証し、コンポーネントの証明書に署名します。証明書は、その識別情報を証明するためにOzone ManagerとDataNodeによって使用されます。これは、デリゲーショントークン/ブロックトークンの署名と検証に特に役立ちます。
ブロックトークンの場合、Ozone Manager(トークン発行者)はプライベートキーでトークンに署名し、DataNode(トークン検証者)はOzone Managerの証明書を使用してブロックトークンを検証します。
Ozone Manager(トークン発行者および検証者)がHA(高可用性)モードで実行されているデリゲーショントークンの場合。複数のOzone Managerインスタンスが同時に実行されています。Ozone Managerインスタンス1によって発行および署名されたデリゲーショントークンは、リーダーOzone Managerが変更されたときにOzone Managerインスタンス2によって検証できます。これは両方のインスタンスがSCM CA署名付き証明書を信頼するためです。詳細についてはOzone HAの設計ドキュメントもご覧ください。
まとめ
認証はApache Hadoop Ozoneセキュリティの最も重要な構成要素の1つです。これで、Apache Hadoop Ozoneでサポートされている認証メカニズムとその仕組みについて理解を深めることができます。これは、認可や監査などの他のOzoneセキュリティの柱を理解するのに役立ちます。
Ozone セキュリティの認可、監査、暗号化、GDPRに関するフォローアップ記事を楽しみにしてください。詳細に興味がある場合は、Ozoneセキュリティ設計ドキュメントで技術的な詳細を見つけることができます。
参照
[1] Apache Hadoop Ozoneアーキテクチャ
[2] Ozoneのベンチマーク:ClouderaのCDP用次世代ストレージ(リンクはあとで更新)
[3] What is Kerberos? · Hadoop and Kerberos: The Madness Beyond the Gate
[4] Apache Hadoop Ozoneのドキュメント
[5] Adding Security to Apache Hadoop
[6] Apache Hadoop Ozone HA Design Document on HDDS-505
[7] Apache Hadoop Ozone Security Design Document on HDDS-4
追記
2020年4月23日現在、Cloudera Data Platform — Data Center (CDP-DC) 7.0.3にはOzone 0.4.0が技術評価版として含まれています。https://docs.cloudera.com/runtime/7.0.3/ozone-storing-data/topics/ozone-introduction.html
謝辞
今回もCloudera Japanの@d1ceと@yoshiyuki.kono両名にレビューしていただきました。ありがとうございます!