Flink Opensource SQL使用DEW管理访问凭据
操作场景
DLI将Flink作业的输出数据写入到Mysql或DWS时,需要在connector中设置账号、密码等属性。但是账号密码等信息属于高度敏感数据,需要做加密处理,以保障用户的数据隐私安全。
数据加密服务(Data Encryption Workshop,DEW)、云凭据管理服务(Cloud Secret Management Service,CSMS),提供一种安全、可靠、简单易用隐私数据加解密方案。
用户或应用程序通过凭据管理服务,创建、检索、更新、删除凭据,轻松实现对敏感凭据的全生命周期的统一管理,有效避免程序硬编码或明文配置等问题导致的敏感信息泄露以及权限失控带来的业务风险。
本节操作介绍Flink Opensource SQL场景使用DEW管理和访问凭据的操作指导。
前提条件
- 已在DEW服务创建通用凭证,并存入凭据值。具体操作请参考:创建通用凭据。
- 已创建DLI访问DEW的委托并完成委托授权。该委托需具备以下权限:
- DEW中的查询凭据的版本与凭据值ShowSecretVersion接口权限,csms:secretVersion:get。
- DEW中的查询凭据的版本列表ListSecretVersions接口权限,csms:secretVersion:list。
- DEW解密凭据的权限,kms:dek:decrypt。
委托权限示例请参考自定义DLI委托权限和常见场景的委托权限策略。
- 仅支持Flink1.15版本使用DEW管理访问凭据,在创建作业时,请配置作业使用Flink1.15版本、且已在作业中配置允许DLI访问DEW的委托信息。
- 在DLI管理控制台新建“增强型跨源连接”配置DLI与数据源的网络连通。
具体操作请参考增强型跨源连接。
语法格式
create table tableName( attr_name attr_type (',' attr_name attr_type)* (',' WATERMARK FOR rowtime_column_name AS watermark-strategy_expression) ) with ( ... 'dew.endpoint'='', 'dew.csms.secretName'='', 'dew.csms.decrypt.fields'='', 'dew.projectId'='', 'dew.csms.version'='' );
参数说明
参数 |
是否必选 |
默认值 |
数据类型 |
参数说明 |
---|---|---|---|---|
dew.endpoint |
是 |
无 |
String |
指定要使用的DEW服务所在的endpoint信息。 获取地区和终端节点。 配置示例:'dew.endpoint'='kms.cn-xxxx.myhuaweicloud.com' |
dew.projectId |
否 |
有 |
String |
DEW所在的项目ID, 默认是Flink作业所在的项目ID。 |
dew.csms.secretName |
是 |
无 |
String |
在DEW服务的凭据管理中新建的通用凭据的名称。 配置示例:'dew.csms.secretName'='secretInfo' |
dew.csms.decrypt.fields |
是 |
无 |
String |
指定connector with属性中,哪些字段属性需要使用DEW云凭据管理服务进行解密。字段属性之间用逗号分隔,例如:'dew.csms.decrypt.fields'='field1,field2,field3' |
dew.csms.version |
否 |
最新的version |
String |
在DEW服务的凭据管理中新建的通用凭据的版本号(凭据的版本标识符)。 若不指定,则默认获取该通用凭证的最新版本号。 配置示例: 'dew.csms.version'='v1' |
示例
本例以通过DataGen表产生随机数据并输出到Mysql结果表中为例,介绍Flink Opensource SQL使用DEW管理访问凭据的配置方法。
- 创建DLI与Mysql的增强型跨源连接。详细步骤请参考创建增强型跨源连接。
- 创建DLI访问DEW的委托并完成委托授权。详细步骤请参考自定义DLI委托权限。
- 在DEW创建通用凭证。详细操作请参考创建通用凭据。
- 登录DEW管理控制台
- 选择“凭据管理”,进入“凭据管理”页面。
- 单击“创建凭据”。配置凭据基本信息
- 本例配置Mysql的凭据值:
- "MySQLUsername":"demo"
- "MySQLPassword":"*******",其中"*******"为Mysql的访问密码
- Flink作业编辑框中输入具体的作业SQL,本示例作业参考如下。
create table dataGenSource( user_id string, amount int ) with ( 'connector' = 'datagen', 'rows-per-second' = '1', --每秒生成一条数据 'fields.user_id.kind' = 'random', --为字段user_id指定random生成器 'fields.user_id.length' = '3' --限制user_id长度为3 ); CREATE TABLE jdbcSink ( user_id string, amount int ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://MySQLAddress:MySQLPort/flink',--其中url中的flink表示MySQL中orders表所在的数据库名 'table-name' = 'orders', 'username' = 'MySQLUsername', -- DEW服务中,名称为secretInfo,且版本号v1的的通用凭证,定义凭证值的键MySQLUsername,它的值为用户的敏感信息。 'password' = 'MySQLPassword', -- DEW服务中,名称为secretInfo,且版本号v1的的通用凭证,定义凭证值的键MySQLPassword,它的值为用户的敏感信息。 'sink.buffer-flush.max-rows' = '1', 'dew.endpoint'='kms.cn-xxxx.myhuaweicloud.com', --使用的DEW服务所在的endpoint信息 'dew.csms.secretName'='secretInfo', --DEW服务通用凭据的凭据名称 'dew.csms.decrypt.fields'='username,password', --其中username,password字段值,需要利用DEW凭证管理,进行解密替换。 'dew.csms.version'='v1' ); insert into jdbcSink select * from dataGenSOurce;