Newer
Older
notes / NiFi / AuthN_and_AuthZ_SimpleFileBase / REAME.md

ファイルベースの認証・認可

概要

一般的なシステムでは、設定ファイルベースの簡易な認証認可システムが提供されているのが一般的ですが、Apache NiFiではサポートされておらず、 サードパーティのコンポーネントである、NiFi File Identity Providerとして提供されています。

前提

  • Apache NiFi 1.6.0 が${NIFI_HOME}にインストール済みで、スタンドアローンな構成で他の設定は完了していること。
  • クライアント証明書による認証・認可の以下を設定済みであること。
    • NiFi ToolKitを使用した管理者の証明書の生成(ここでは、クライアント証明書を作成せずに、キーストア、トラストストアを生成します)。
      • ただし、コマンドは以下のコマンドを実行すること。
        c:\nifi-toolkit> bin\tls-toolkit.bat standalone -n localhost -o target
    • nifi.propertiesの修正
    • キーストア/トラストストアの設定

NiFi File Identity Providerのインストール

  • GitHubのリポジトリをクローンします。
    $ git clone https://github.com/BatchIQ/nifi-file-identity-provider-bundle.git
    $ cd nifi-file-identity-provider-bundle
  • pom.xmlを修正します。
    --- a/nifi-file-identity-provider/pom.xml
    +++ b/nifi-file-identity-provider/pom.xml
    @@ -85,22 +85,22 @@
             <dependency>
                 <groupId>org.apache.nifi</groupId>
                 <artifactId>nifi-api</artifactId>
    -            <version>1.0.0</version>
    +            <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.nifi</groupId>
                 <artifactId>nifi-framework-api</artifactId>
    -            <version>1.0.0</version>
    +            <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.nifi</groupId>
                 <artifactId>nifi-utils</artifactId>
    -            <version>1.0.0</version>
    +            <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.nifi</groupId>
                <artifactId>nifi-properties</artifactId>
    -            <version>1.0.0</version>
    +            <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>ch.qos.logback</groupId>
    diff --git a/pom.xml b/pom.xml
    index 0156c66..4520607 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -83,7 +83,7 @@
                 <plugin>
                     <groupId>org.apache.nifi</groupId>
                     <artifactId>nifi-nar-maven-plugin</artifactId>
    -                <version>1.1.0</version>
    +                <version>1.2.0</version>
                     <extensions>true</extensions>
                 </plugin>
            </plugins>
  • ビルドします。

    $ mvn clean package
  • 成果物を確認します。

    $ ls -la nifi-file-identity-provider-nar/target/*.nar
    -rw-r--r-- 1 sogabe 197121 5131727 6月   3 14:10 nifi-file-identity-provider-nar/target/nifi-file-identity-provider-nar-1.0.0.nar  // (1)
    
    $ ls -la nifi-file-identity-provider/target/*.jar
    -rw-r--r-- 1 sogabe 197121   23321 6月   3 14:10 nifi-file-identity-provider/target/nifi-file-identity-provider-1.0.0.jar
    -rw-r--r-- 1 sogabe 197121 5790370 6月   7 12:22 nifi-file-identity-provider/target/nifi-file-identity-provider-1.0.0-cli.jar     // (2)
  • NiFi File Identity Providerのコンポーネント(1)を独自コンポーネントのディレクトリ${NIFI_HOME}/extendsにコピーします。

    $ mkdir -p ${NIFI_HOME}/extends
    $ cp nifi-file-identity-provider-nar/target/nifi-file-identity-provider-nar-1.0.0.nar ${NIFI_HOME}/extends
  • nifi.propertiesの38行目位に、独自コンポーネントのディレクトリを設定します。
    nifi.nar.library.directory=./lib
    nifi.nar.working.directory=./work/nar/
    nifi.documentation.working.directory=./work/docs/components

    nifi.nar.library.directory.extends=./extends     // 新規追加
  • ユーザ、パスワードを生成するコマンドラインツールを、${NIFI_HOME}/binにコピーします。
    $ cp nifi-file-identity-provider/target/nifi-file-identity-provider-1.0.0-cli.jar ${NIFI_HOME}/bin

設定

File Identity Providerの設定

  • Login Identity Providerの設定を、conf/login-identity-providers.xmlに追加します。
   <provider>
       <identifier>file-identity-provider</identifier>
       <class>com.batchiq.nifi.authentication.file.FileIdentityProvider</class>
       <property name="Credentials File">conf/login-credentials.xml</property>
       <property name="Authentication Expiration">12 hours</property>
   </provider>
  • FileIdentity Providerを使用するように、nifi.propertiesを修正します。
    nifi.security.user.authorizer=managed-authorizer
    nifi.security.user.login.identity.provider=file-identity-provider   // <-- ここ
    nifi.security.ocsp.responder.url=
    nifi.security.ocsp.responder.certificate=

管理者の設定

最初に、NiFi UIにログインし、他のユーザ、グループおよびポリシーを設定する管理者nifiAdminを追加します。

  • ユーザ、パスワードを生成するコマンドラインツールを使用して、login-credentials.xmlを生成します。
    $ java -jar ${NIFI_HOME}/bin/nifi-file-identity-provider-1.0.0-cli.jar add ${NIFI_HOME}/conf/login-credentials.xml nifiAdmin
    Password for nifiAdmin: ****  // 初期ユーザのパスワード
    Added user nifiAdmin

${APACHE_HOME}/conf/authorizers.xmlの修正を行います。

  • 46行目の<userGroupProvider>の子要素<property name="Initial User Identity 1"/>に、管理者を設定します。
    <userGroupProvider>
        <identifier>file-user-group-provider</identifier>
        <class>org.apache.nifi.authorization.FileUserGroupProvider</class>
        <property name="Users File">./conf/users.xml</property>
        <property name="Legacy Authorized Users File"></property>

        <property name="Initial User Identity 1">nifiAdmin</property>    // ここを修正
    </userGroupProvider>
  • 242行目の<accessPolicyProvider>の子要素<property name="Initial Admin Identity"/>に、管理者を設定します。
    <accessPolicyProvider>
        <identifier>file-access-policy-provider</identifier>
        <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
        <property name="User Group Provider">file-user-group-provider</property>
        <property name="Authorizations File">./conf/authorizations.xml</property>
        <property name="Initial Admin Identity">nifiAdmin</property>              // ここを修正
        <property name="Legacy Authorized Users File"></property>

        <property name="Node Identity 1"></property>
    </accessPolicyProvider>

接続確認

設定が完了したので、Apache NiFiのインスタンスを起動して、https://local:9443/nifi/ にアクセスすると、ログイン画面が表示されます。 ただし、接続時に認証エラーが発生しますが、続行してください

"ログイン画面"

管理者のユーザ名とパスワードを入力してログインします。

Chromeでの事象について

HTTPSでサーバと接続しますが、自己署名の証明書を使用しているため、接続時にエラーが表示されることがあります。 その場合は、"詳細設定"->"localhost にアクセスする(安全ではありません)"をクリックしてください(IEでは、"詳細"->"Web ページへ移動 (非推奨)")。

Chromeの最新版では、上記で接続できるようになりますが、30秒程度アクセスしないと無通信のためログアウトしてしまいます。 このような場合は、${NIFI_TOOLKIT}/target/nifi-cert.pemを信頼できる認証局としてインポートしてください。

nifi-cert.pemのインポート

管理者のデフォルトポリシー

ここで作成した管理者nifiAdminには、次のようなポリシーがデフォルトで設定されています。 クライアント証明書の場合と少し異なりますが、別途適切なポリシーを持つユーザを作成する必要があります。

デフォルトポリシー

ユーザの追加

新たにユーザを追加する場合は、login-credentials.xmlへのユーザの追加とNiFi UIでのユーザの追加が必要になります。