本文为您介绍如何配置OSS/OSS-HDFS Credential Provider。

基本配置方式

您可以将OSS或OSS-HDFS的AccessKey ID、AccessKey Secret、Endpoint预先配置在Hadoop的core-site.xml中。EMR集群配置具体步骤为:
  1. 在Hadoop-Common服务配置页面,单击core-site.xml页签。
  2. 单击新增配置项,新增配置项fs.oss.accessKeyIdfs.oss.accessKeySecret
  3. 单击确定,填写执行原因,单击确定
  4. 单击下方的保存

使用Hadoop Credential Providers存储AccessKey信息

上面基本配置方式中的fs.oss.accessKeyIdfs.oss.accessKeySecret将会明文配置在core-site.xml中,您可以将其以加密对方式存储至Hadoop Credential Providers文件中。

使用Hadoop提供的命令,存储AccessKey和SecurityToken信息至Credential文件中,命令格式如下。
hadoop credential <subcommand> [options]
例如,存储AccessKey和SecurityToken信息至JECKS文件中,除了使用文件权限保护该文件外,您也可以指定密码加密存储信息,如果不指定密码则使用默认字符串加密。
hadoop credential create fs.oss.accessKeyId -value AAA -provider jceks://file/root/oss.jceks
hadoop credential create fs.oss.accessKeySecret -value BBB -provider jceks://file/root/oss.jceks
hadoop credential create fs.oss.securityToken -value CCC -provider jceks://file/root/oss.jceks
生成Credential文件后,您需要配置下面的参数来指定Provider的类型和位置。
<configuration>
    <property>
        <name>fs.oss.security.credential.provider.path</name>
        <value>jceks://file/root/oss.jceks</value>
        <description>配置存储AccessKey的Credential文件。例如,jceks://file/${user.home}/oss.jceks为HOME下的oss.jceks文件</description>
    </property>
</configuration>

使用JindoSDK OSS/OSS-HDFS Credential Provider

默认会配置SimpleCredentialsProvider、EnvironmentVariableCredentialsProvider和CommonCredentialsProvider这三个Credential Provider,按照先后顺序读取Credential直至读到有效的Credential。
<configuration>
    <property>
        <name>fs.oss.credentials.provider</name>
        <value>com.aliyun.jindodata.oss.auth.SimpleCredentialsProvider,com.aliyun.jindodata.oss.auth.EnvironmentVariableCredentialsProvider,com.aliyun.jindodata.oss.auth.CommonCredentialsProvider</value>
        <description>配置com.aliyun.jindodata.oss.auth.JindoCredentialsProvider,多个类时使用英文逗号(, )隔开,按照先后顺序读取Credential直至读到有效的Credential。Provider详情请参见Credential Provider类型。</description>
    </property>
</configuration>
您可以根据情况,选择不同的Credential Provider,支持如下Provider:
Credential Provider类型 说明
TemporaryCredentialsProvider 适合使用有时效性的AccessKey和SecurityToken访问OSS或OSS-HDFS的情况。
SimpleCredentialsProvider 适合使用长期有效的AccessKey访问OSS或OSS-HDFS的情况。
EnvironmentVariableCredentialsProvider 在环境变量中获取AccessKey。
CommonCredentialsProvider 通用配置。
CustomCredentialsProvider 对接定制的免密服务。

TemporaryCredentialsProvider

  • 配置Provider类型
    <configuration>
        <property>
            <name>fs.oss.credentials.provider</name>
            <value>com.aliyun.jindodata.oss.auth.TemporaryCredentialsProvider</value>
        </property>
    </configuration>
  • 配置OSS或OSS-HDFS AccessKey
    <configuration>
        <property>
            <name>fs.oss.accessKeyId</name>
            <value>OSS/OSS-HDFS的AccessKey Id</value>
        </property>
        <property>
            <name>fs.oss.accessKeySecret</name>
            <value>OSS/OSS-HDFS的AccessKey Secret</value>
        </property>
        <property>
            <name>fs.oss.securityToken</name>
            <value>OSS/OSS-HDFS的SecurityToken(临时安全令牌)</value>
        </property>
    </configuration>

SimpleCredentialsProvider

  • 配置Provider类型
    <configuration>
        <property>
            <name>fs.oss.credentials.provider</name>
            <value>com.aliyun.jindodata.oss.auth.SimpleCredentialsProvider</value>
        </property>
    </configuration>
  • 配置OSS或OSS-HDFS AccessKey
    <configuration>
        <property>
            <name>fs.oss.accessKeyId</name>
            <value>OSS/OSS-HDFS的AccessKey Id</value>
        </property>
        <property>
            <name>fs.oss.accessKeySecret</name>
            <value>OSS/OSS-HDFS的AccessKey Secret</value>
        </property>
    </configuration>

EnvironmentVariableCredentialsProvider

  • 配置Provider类型
    <configuration>
        <property>
            <name>fs.oss.credentials.provider</name>
            <value>com.aliyun.jindodata.oss.auth.EnvironmentVariableCredentialsProvider</value>
        </property>
    </configuration>
  • 配置OSS或OSS-HDFS AccessKey
    需要在环境变量中配置以下参数:
    参数 说明
    OSS_ACCESS_KEY_ID OSS或OSS-HDFS的AccessKey ID。
    OSS_ACCESS_KEY_SECRET OSS或OSS-HDFS的AccessKey Secret。
    OSS_SECURITY_TOKEN OSS或OSS-HDFS的SecurityToken(临时安全令牌)。
    说明 仅配置有时效Token时需要。

CommonCredentialsProvider

  • 配置Provider类型
    <configuration>
        <property>
            <name>fs.oss.credentials.provider</name>
            <value>com.aliyun.jindodata.oss.auth.CommonCredentialsProvider</value>
        </property>
    </configuration>
  • 配置OSS或OSS-HDFS AccessKey
    <configuration>
        <property>
            <name>jindo.common.accessKeyId</name>
            <value>OSS/OSS-HDFS的AccessKey Id</value>
        </property>
        <property>
            <name>jindo.common.accessKeySecret</name>
            <value>OSS/OSS-HDFS的AccessKey Secret</value>
        </property>
        <property>
            <name>jindo.common.securityToken</name>
            <value>OSS/OSS-HDFS的SecurityToken(临时安全令牌)。仅配置有时效Token时需要。</value>
        </property>
    </configuration>

CustomCredentialsProvider

  • 配置Provider类型
    <configuration>
        <property>
            <name>fs.oss.credentials.provider</name>
            <value>com.aliyun.jindodata.oss.auth.CustomCredentialsProvider</value>
        </property>
    </configuration>
  • 配置免密服务地址
    <configuration>
        <property>
            <name>aliyun.oss.provider.url</name>
            <value>免密服务地址</value>
        </property>
    </configuration>
    aliyun.oss.provider.url支持 http(s)协议和Secrets协议:
    • http(s)协议
      http(s)协议免密服务地址格式为http://localhost:1234/sts, http免密协议要求返回结果为JSON格式,如果您需要对接您的http免密服务,详情请参见步骤五:(可选)获取临时授权Token
      {
      "AccessKeyId" : "XXXXXXXXX",
      "AccessKeySecret" : "XXXXXXXXX",
      "Expiration" : "2020-11-01T05:20:01Z",
      "SecurityToken" : "XXXXXXXXX",
      "LastUpdated" : "2020-10-31T23:20:01Z",
      "Code" : "Success"
      }
    • Secrets协议
      Secrets协议免密服务地址格式为secrets:///local_path_prefix,常见使用于k8s 场景。其中local_path_prefix为路径前缀:
      • 如果local_path_prefixsecrets:///secret/JindoOss,则会在节点上查找/secret/JindoOssAccessKeyId/secret/JindoOssAccessKeySecret/secret/JindoOssSecurityToken 等文件。
      • 如果local_path_prefixsecrets:///secret/JindoOss/,则会在节点上查找/secret/JindoOss/AccessKeyId/secret/JindoOss/AccessKeySecret/secret/JindoOss/SecurityToken等文件。