AlwaysOn SQLでの認証の使用

AlwaysOn SQLは、DSE認証を使用するように構成できます。

AlwaysOn SQLは、DSE認証を使用するように構成できます。

DSE 認証を有効にする場合は、 hive-site.xml 構成ファイルを変更して、JDBC 認証を有効にします。DSEは、パスワード認証とKerberos認証の構成をサポートしています。hive-site.xmlファイルには、認証(デフォルト)、パスワード認証、またはKerberos認証を使用しない、事前に構成された設定が含まれたセクションがあります。優先認証メカニズムのコメントを解除し、AlwaysOn SQLを再起動します。

注: DSEは複数の認証メカニズムをサポートしていますが、AlwaysOn SQLはデータ・センターごとに1つのメカニズムのみをサポートします。

AlwaysOn SQL はDSEプロキシ認証をサポートしています。クエリーを実行するユーザーは、JDBCを使用して認証されたユーザーです。ユーザーAmyがAlwaysOn SQLセッションを開始し、BobがJDBCセッションを開始した場合、クエリーはBobに代わってAmyが実行します。Amyは、Bobに代わってこれらのクエリーを実行するためのパーミッションを持っている必要があります。

AlwaysOn SQLのalwayson_sql_optionsで認証を有効にするには、次の手順に従います。

hive-site.xml

Sparkを使用する場合のhive-site.xmlファイルのデフォルトの場所:
パッケージ・インストール /etc/dse/spark/hive-site.xml
tarボール・インストール installation_location/resources/spark/conf/hive-site.xml

手順

  1. AlwaysOn SQLオプションで指定されたauth_userロールを作成し、ロールに次のパーミッションを付与します。
    CREATE ROLE alwayson_sql WITH LOGIN=true; // role name matches auth_user 
    
    // Required if scheme_permissions true
    GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO alwayson_sql; 
    
    // Spark RPC settings
    GRANT ALL PERMISSIONS ON REMOTE OBJECT DseResourceManager TO alwayson_sql;
    GRANT ALL PERMISSIONS ON REMOTE OBJECT DseClientTool TO alwayson_sql;
    GRANT ALL PERMISSIONS ON REMOTE OBJECT AlwaysOnSqlRoutingRPC to alwayson_sql;
      
    // Spark and DSE required table access
    GRANT SELECT ON system.size_estimates TO alwayson_sql;
    GRANT SELECT, MODIFY ON "HiveMetaStore".sparkmetastore TO alwayson_sql;
    GRANT SELECT, MODIFY ON dse_analytics.alwayson_sql_cache_table TO alwayson_sql; 
    GRANT SELECT, MODIFY ON dse_analytics.alwayson_sql_info TO alwayson_sql;
    
    // Permissions to create and change applications  
    GRANT CREATE, DESCRIBE ON ANY WORKPOOL TO alwayson_sql;
    GRANT MODIFY, DESCRIBE ON ANY SUBMISSION TO alwayson_sql;
    詳細については、「DSE Sparkアプリケーションのパーミッションの設定」を参照してください。
  2. ユーザー・ロールを作成します。

    内部認証の場合:

    CREATE ROLE 'user_name' 
    WITH LOGIN = true;

    Kerberosを使用する場合は、各ユーザーの完全なKerberosプリンシパル名に一致するロールを設定します。

    CREATE ROLE 'user_name/example.com@EXAMPLE.COM' 
    WITH LOGIN = true;
  3. ユーザー・ロールにキースペースとテーブルにアクセスするためのパーミッションを付与します。

    内部ロールの場合:

    GRANT SELECT ON KEYSPACE keyspace_name 
    TO  'user_name';

    Kerberosロールの場合:

    GRANT SELECT ON KEYSPACE keyspace_name 
    TO  'user_name/example.com@EXAMPLE.COM';
  4. AlwaysOn SQLロール(auth_user)がユーザー・ ロールを使用してコマンドを実行できるようにします。

    内部ロールの場合:

    GRANT PROXY.EXECUTE 
    ON ROLE 'user_name' 
    TO alwayson_sql;

    Kerberosロールの場合:

    GRANT PROXY.EXECUTE 
    ON ROLE 'user_name/example.com@EXAMPLE.COM' 
    TO alwayson_sql;
  5. エディターでhive-site.xml構成ファイルを開きます。
  6. コメントを解除し、hive-site.xmlで使用されている認証メカニズムを変更します。
    • パスワード認証を使用する場合は、DSE でパスワード認証を有効にします
    • Kerberos認証を使用する場合は、 DSEでKerberosを有効にする必要はありません。AlwaysOn SQLには、独自のサービス・プリンシパルとキータブが必要です。
    • JDBCからAlwaysOn SQLにログインするには、ユーザーがDSE でログイン・パーミッションを持っている必要があります。

    以下の例は、Kerberos認証を有効にする方法を示しています。Kerberosドメインとキータブ・ファイルへのパスを変更します。

      <!-- Start of: configuration for authenticating JDBC users with Kerberos -->
        <property>
          <name>hive.server2.enable.doAs</name>
          <value>true</value>
        </property>
    
        <property>
          <name>hive.server2.authentication</name>
          <value>KERBEROS</value>
        </property>
    
        <property>
          <name>hive.server2.authentication.kerberos.principal</name>
          <value>hiveserver2/_HOST@KERBEROS DOMAIN</value>
        </property>
    
        <property>
          <name>hive.server2.authentication.kerberos.keytab</name>
          <value>path to hiveserver2.keytab</value>
        </property>
      <!-- End of: configuration for authenticating JDBC users with Kerberos -->
  7. AlwaysOn SQLを再起動します。
    dse client-tool alwayson-sql restart