# SparkJob使用DEW获取访问凭证用于读写OBS
#### 什么是临时凭证？
临时安全凭证是具备临时访问权限的身份凭证，包括临时AK/SK和SecurityToken，临时AK/SK和SecurityToken必须同时使用。
了解[临时安全凭证](https://support.huaweicloud.com/iam_faq/iam_01_0620.html)。
#### 操作场景
SparkJob操作OBS桶时，需要配置AK/SK访问OBS，为了确保AK/SK数据安全，您可以通过密码安全中心（Data Encryption Workshop，DEW）的子服务"云凭据管理服务（Cloud Secret Management Service，CSMS）"对AK/SK统一管理，有效避免程序硬编码或明文配置等问题导致的敏感信息泄露以及权限失控带来的业务风险。
本例以获取访问OBS的AK/SK为例介绍SparkJob使用DEW获取访问凭证读写OBS的操作指导。
#### 约束与限制
- 已在作业中配置允许AI DataLake访问DEW的委托信息并完成委托授权。自定义委托及配置请参考[创建自定义委托](https://support.huaweicloud.com/usermanual-aidatalake/aidatalake_01_0078.html)。该委托需具备以下权限。
  表1权限说明 
  | 权限                         | 说明                                      |
  |:---|:---|
  | csms:secretVersion:get    | DEW中的查询凭据的版本与凭据值ShowSecretVersion接口权限。 |
  | csms:secretVersion:list | DEW中的查询凭据的版本列表ListSecretVersions接口权限。   |
  | kms:dek:decrypt            | DEW解密凭据的权限。                              |
     
  
- 使用该功能，所有涉及OBS的桶，都需要配置AK/SK，获取方式请参见[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_05_0003.html)。
- 已在DEW服务创建通用凭证，并存入凭据值。具体操作请参考：[创建通用凭据](https://support.huaweicloud.com/usermanual-dew/dew_01_9993.html)。
 
#### 语法格式
在SparkJob作业编辑界面，配置Spark参数，配置信息如下:
不同的OBS桶，使用不同的AK/SK认证信息。 可以使用如下配置方式，根据桶指定不同的AK/SK信息，参数说明详见[表2]。
```
spark_config: {
    spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.access.key: USER_AK_CSMS_KEY
    spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.secret.key: USER_SK_CSMS_KEY
    spark.hadoop.fs.obs.security.provider: com.huawei.spark.provider.UserBasicCredentialProvider
    spark.hadoop.fs.dew.csms.secretName: CredentialName
    spark.hadoop.fs.dew.endpoint: ENDPOINT
    spark.hadoop.fs.dew.csms.version: VERSION_ID
    spark.hadoop.fs.dew.csms.cache.time.second: CACHE_TIME
    spark.hadoop.fs.dew.projectId: ProjectID
}
```
#### 参数说明
 表2参数说明 
| 参数                                                      | 是否必选 | 默认值       | 数据类型 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|:---|
| spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.access.key | 是      | 无             | String   | 其中USER_BUCKET_NAME为用户的桶名，需要替换为用户实际使用的OBS桶名。 参数的值为用户定义在CSMS通用凭证中的键key， 其Key对应的value为用户的AK（Access Key Id），需要具备访问OBS对应桶的权限。                                                                                                                                                                                                                                                                                                                                                   |
| spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.secret.key | 是      | 无             | String   | 其中USER_BUCKET_NAME为用户的桶名，需要替换为用户实际使用的OBS桶名。 参数的值为用户定义在CSMS通用凭证中的键key， 其Key对应的value为用户的SK（Secret Access Key），需要具备访问OBS对应桶的权限。                                                                                                                                                                                                                                                          |
| spark.hadoop.fs.obs.security.provider                      | 是      | 无             | String   | OBS AK/SK认证机制，使用DEW服务中的CSMS凭证管理，获取OBS的AK、SK。 默认取值为com.huawei.spark.provider.UserBasicCredentialProvider                                                                                                                                                                                                                                                                                |
| spark.hadoop.fs.dew.csms.secretName                        | 是      | 无             | String   | 在DEW服务的凭据管理中新建的通用凭据的名称。具体操作请参考：[创建通用凭据](https://support.huaweicloud.com/usermanual-dew/dew_01_9993.html)。 配置示例：spark.hadoop.fs.dew.csms.secretName: secretInfo                                                                                                                                                                                                                        |
| spark.hadoop.fs.dew.endpoint                               | 是      | 无             | String   | 指定要使用的DEW服务所在的endpoint信息。 获取[地区和终端节点](https://console.huaweicloud.com/apiexplorer/#/endpoint?DEW)。 配置示例：spark.hadoop.fs.dew.endpoint: kms.cn-xxxx.myhuaweicloud.com                                                                                       |
| spark.hadoop.fs.dew.csms.version                       | 是    | 最新的version | String   | 在DEW服务的凭据管理中新建的通用凭据的版本号(凭据的版本标识符)。 如果不指定最新的版本号（凭据的版本标识符），系统将无法直接获取最新版本的凭据信息，可能导致应用程序访问失败或使用过期的凭据，从而影响数据安全性和服务的稳定性。 请在DEW管理控制台查看凭据的版本信息，并配置该参数为最新的版本号，以确保应用程序能够安全、稳定地访问所需数据。 配置示例：spark.hadoop.fs.dew.csms.version: v1 |
| spark.hadoop.fs.dew.csms.cache.time.second                 | 否      | 3600          | Long     | Spark作业访问获取CSMS通用凭证后，缓存的时间。 单位为秒。默认值为3600秒。 当缓存时间结束后，重新获取凭证，区别于失效。                                                                                                                                                                                                                                                                                  |
| spark.hadoop.fs.dew.projectId                              | 否      | 有             | String   | DEW所在的项目ID， 默认是Spark作业所在的项目ID。 [获取项目ID](https://support.huaweicloud.com/api-dli/dli_02_0183.html)                                                                                                                                                                                                                                                                              |
   
#### 配置参数示例
本章节JAVA代码样例演示将DataGen数据处理后写入到OBS，具体参数配置请根据实际环境修改。
1. 创建AI DataLake访问DEW的委托并完成委托授权。 详细步骤请参考[创建自定义委托](https://support.huaweicloud.com/usermanual-aidatalake/aidatalake_01_0078.html)。
   
2. 在DEW创建通用凭证。详细操作请参考[创建通用凭据](https://support.huaweicloud.com/usermanual-dew/dew_01_9993.html)。
3. AI DataLake Spark jar作业编辑界面设置作业参数。 Spark参数：
   ```
   spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.access.key:USER_AK_CSMS_KEY
   spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.secret.key: USER_SK_CSMS_KEY
   spark.hadoop.fs.obs.security.provider :com.huawei.spark.provider.UserBasicCredentialProvider
   spark.hadoop.fs.dew.csms.secretName:secretInfo-test
   spark.hadoop.fs.dew.endpoint:https://kms.cn-north-7.myhuaweicloud.com
   spark.hadoop.fs.dew.csms.version:v1
   spark.hadoop.fs.dew.csms.cache.time.second:3600
   spark.hadoop.fs.dew.projectId:4cf650fd46704908aa071b4df******
   ```
   
 
