更新时间:2024-07-22 GMT+08:00
分享

配置应用代码

功能介绍

如果开启了用户认证功能,就需要管理员账号给访问用户授权以及配置相关参数,这样才可以访问HBase集群。

必须使用CloudTable控制台下载的2.x版本客户端,且客户端中包含jar包,才能使用用户认证功能。

操作步骤

  1. 复制如下参数到应用的hbase-site.xml文件中。

    <property >
            <name>hbase.security.authentication</name>
            <value>iam</value>
    </property>
    <property >
            <name>hadoop.security.authentication</name>
            <value>TOKEN</value>
    </property>
    <property>
            <name>hbase.client.userprovider.class</name>
            <value>org.apache.hadoop.hbase.security.UserProviderExtend</value>
    </property>
    <property >
            <name>hbase.zookeeper.custom.auth.enabled</name>
            <value>true</value>
    </property>
    <property >
            <name>zookeeper.custom.authinfo.providers</name>
            <value>org.apache.hadoop.hbase.security.zookeeper.HBaseIAMAuthInfoProvider</value>
    </property>
    <property>
            <name>iam.user.password.encrypted</name>
            <value>false</value>
    </property>
    <property>
            <name>hbase.zookeeper.authProvider.scheme</name>
            <value>iam</value>
    </property>
    <property >
            <name>hbase.client.sasl.provider.class</name>
            <value>org.apache.hadoop.hbase.security.provider.IAMProviderSelector</value>
    </property>
    <property >
            <name>hbase.client.sasl.provider.extras</name>
            <value>org.apache.hadoop.hbase.security.provider.IAMSaslClientAuthenticationProvider</value>
    </property>
    <property>
            <name>hbase.rpc.client.impl</name>
            <value>org.apache.hadoop.hbase.ipc.BlockingRpcClient</value>
    </property>
    如果集群开启了安全通道,还需要添加如下参数到应用的hbase-site.xml中。
    <property>
        <name>hbase.rpc.protection</name>
        <value>privacy</value>
    </property>

  2. 参考创建Configuration对修改后的配置文件进行加载。
  3. 参考如下代码,加载用于认证的用户信息。样例代码中的IAM_USER_DOMAIN,IAM_USER_NAME,IAM_USER_PASSWORD需要根据使用的应用提前配置在环境变量中。

    // IAM账户名
    String domainName= System.getenv("IAM_USER_DOMAIN");
    // IAM用户名(子账号名)
    String userName = System.getenv("IAM_USER_NAME");
    // 基于信息安全考虑,强烈建议将在配置文件或者环境变量中的密码配置为加密后的密文,
    // 然后在代码中将密码解密后使用。
    String userPassword = ((com.huawei.hadoop.hbase.crypto.Crypt) encryptedPass -> {
      // 需要开发人员根据密文的加密方式进行对应的解密操作并返回。
      return "decryptedPass";
    }).decrypt(System.getenv("IAM_USER_PASSWORD"));
    conf.set(org.apache.zookeeper.security.common.IAMConstants.IAM_USER_DOMAIN_NAME, domainName);
    conf.set(org.apache.zookeeper.security.common.IAMConstants.IAM_USER_NAME, userName);
    conf.set(org.apache.zookeeper.security.common.IAMConstants.IAM_USER_PASSWORD, userPassword);

  4. 参考创建Connection,使用更新后的conf对象创建HBase的连接。

相关文档