本文为您介绍如何配置OSS/OSS-HDFS Credential Provider。
基本配置方式
您可以将OSS或OSS-HDFS的AccessKey ID、AccessKey Secret、Endpoint预先配置在Hadoop的core-site.xml中。EMR集群配置具体步骤为:
在Hadoop-Common服务配置页面,单击core-site.xml页签。
单击新增配置项,新增配置项fs.oss.accessKeyId和fs.oss.accessKeySecret。
单击确定,填写执行原因,单击确定。
单击下方的保存。
使用Hadoop Credential Providers存储AccessKey信息
上面基本配置方式中的fs.oss.accessKeyId和fs.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_prefix为secrets:///secret/JindoOss,则会在节点上查找/secret/JindoOssAccessKeyId、/secret/JindoOssAccessKeySecret、/secret/JindoOssSecurityToken 等文件。
如果local_path_prefix为secrets:///secret/JindoOss/,则会在节点上查找/secret/JindoOss/AccessKeyId、/secret/JindoOss/AccessKeySecret、/secret/JindoOss/SecurityToken等文件。