Realtime Compute for Apache Flink permite hacer referencia a las credenciales alojadas en Alibaba Cloud Key Management Service (KMS) dentro de los trabajos. De este modo, se reemplazan los nombres de usuario y contraseñas en texto plano al acceder a las fuentes de datos. Esta función ofrece alojamiento cifrado de credenciales, evita la exposición de texto plano y facilita una gestión de credenciales sin mantenimiento.
Descripción general
Al integrar la gestión de credenciales de KMS, puede hacer referencia en los trabajos de Flink a las credenciales alojadas en KMS, como los nombres de usuario y contraseñas de bases de datos. Así evita exponerlas en texto plano dentro del código del trabajo. Durante la ejecución, Flink asume un rol de RAM para obtener un token temporal de STS, llama a KMS para recuperar el valor real de la credencial y luego se conecta a la fuente de datos de destino.
Ventajas principales:
Protección de información confidencial: no se expone ningún par de usuario y contraseña en texto plano dentro de los trabajos. Las credenciales se alojan cifradas en KMS.
Credenciales sin mantenimiento: gracias a la rotación de credenciales de KMS, Flink obtiene automáticamente el valor más reciente después de cada actualización. No es necesario modificar el código del trabajo.
Notas
Si elimina credenciales en KMS por error, o si modifica o elimina incorrectamente los permisos y la directiva de confianza de un rol de RAM, los trabajos de Flink pueden fallar porque no podrán obtener las credenciales de KMS. Según el Acuerdo de nivel de servicio de Realtime Compute for Apache Flink, la indisponibilidad causada por un uso incorrecto de los recursos por parte de los clientes no está cubierta por el SLA.
Límites
Solo Postgres CDC Connector de los motores VVR 11.8 y posteriores admite el acceso a recursos de la nube con credenciales de KMS.
Existe un límite en la cantidad de roles de RAM que se pueden referenciar para acceder a KMS. Para más detalles, consulte Use a RAM role to access cloud resources.
Preparación de permisos
Paso 1 (crear una credencial de KMS): el operador debe contar con permisos de gestión de credenciales de KMS.
Pasos 2 y 3: se debe asignar al operador la directiva
AliyunRAMFullAccess, o bien otorgarle por separado permisos de gestión de roles y de permisos de RAM. Para más información, consulte Crear una directiva personalizada.Pasos 4 y 5 (referenciar un rol en Flink y desarrollar trabajos): el operador necesita permisos de editor o superiores en el namespace de Flink. También puede recibir permisos detallados para referenciar roles de RAM, gestionar archivos y desarrollar trabajos. Para más detalles, consulte Grant permissions to access the development console.
Paso 1: Crear una credencial de KMS
KMS ofrece varios tipos de credenciales. A continuación se muestra un ejemplo con una credencial de RDS:
Inicie sesión en la consola de Key Management Service. Seleccione la región en la barra de menú superior y, en el panel de navegación izquierdo, elija Resources > Secrets.
En la pestaña Self-Managed Secrets, dentro del área Secret Type, haga clic en Database Secret.
Encima de la lista de la derecha, haga clic en Create Single Secret bajo Create Database Secret, complete la configuración y haga clic en OK.
Para más información, consulte Primeros pasos con Secrets Manager y Gestionar y usar secretos de ApsaraDB RDS.
Paso 2: Crear y configurar un rol de RAM
Este rol funciona como la credencial de identidad que utiliza el servicio de Flink para acceder a KMS. Flink asume el rol para obtener credenciales temporales y llama a KMS con dicho rol para recuperar los valores de las credenciales. Para más detalles sobre el acceso a KMS sin credenciales, consulte el apéndice de Use a RAM role to access cloud resources.
1. Crear un rol de RAM
Inicie sesión en la página Consola de RAM - Roles y haga clic en Create Role. Mantenga las opciones predeterminadas y haga clic en OK.
Introduzca un nombre de rol fácil de identificar, por ejemplo,
FlinkRoleForKMSRead, y haga clic en OK.
2. Agregar una directiva de confianza
Una vez creado el rol, vaya a su página de detalles, haga clic en la pestaña Trust Policy y luego en Edit Trust Policy. Agregue "Service": ["stream.aliyuncs.com"] a Principal para permitir que Flink asuma el rol. Para más información, consulte Modify the trust policy of a RAM role.
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"stream.aliyuncs.com"
]
}
}
],
"Version": "1"
}
3. Otorgar permisos de acceso a KMS al rol de RAM
Cuando Flink asume el rol, llama a KMS actuando como dicho rol. Por lo tanto, debe otorgar previamente los permisos necesarios de KMS en la directiva de permisos del rol.
En la página de detalles del rol, haga clic en la pestaña Permissions y luego en Grant Permission. Agregue la directiva AliyunKMSSecretUserAccess, que otorga permiso para recuperar credenciales en KMS. Si las credenciales están cifradas con una clave maestra del cliente (CMK), otorgue también el permiso kms:Decrypt mediante la directiva AliyunKMSCryptoUserAccess.
Para controlar los permisos a nivel de clave y de credencial, cree una directiva personalizada que otorgue los permisos GetSecretValue y Decrypt, y restrinja el recurso a los elementos especificados. Para más detalles, consulte Referencia de directivas personalizadas de KMS y Crear una directiva personalizada.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "kms:GetSecretValue",
"Resource": "acs:kms:<region>:<account-id>:secret/<secret-name>"
},
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "acs:kms:<region>:<account-id>:key/<key-id>"
}
]
}
Paso 3: Otorgar permisos a un usuario de RAM
Cree una directiva de permisos y asígnela al usuario de RAM. Esto le permitirá pasar el rol de RAM creado en el paso 2 al servicio de Flink para que lo asuma.
Si el usuario de RAM del paso 4 ya tiene asociada la directiva AliyunRAMFullAccess o AliyunStreamFullAccess, ya cuenta con el permiso PassRole. En ese caso, puede omitir este paso.
Crear una directiva de permisos
Inicie sesión en la página Consola de RAM - Policies y haga clic en Create Policy. Cambie al modo Script y edite el contenido de la directiva.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:ListRoles"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ram:PassRole",
"Resource": "acs:ram::<account-id>:role/<role-name>",
"Condition": {
"StringEquals": {
"acs:Service": "stream.aliyuncs.com"
}
}
}
]
}
|
Permiso |
Descripción |
|
|
Permite al usuario consultar la lista de roles de la cuenta para poder seleccionar el rol en la consola de Flink. |
|
|
Permite al usuario pasar el rol especificado al servicio en la nube de Flink. Reemplace
Agregue una condición ( |
Haga clic en OK para guardar la directiva, por ejemplo, con el nombre FlinkPassRolePolicy. Para más información, consulte Crear una directiva personalizada.
Otorgar permisos al usuario de RAM
Inicie sesión en la página Consola de RAM - Users. Busque el usuario de RAM que desea autorizar y haga clic en Add Permissions en la columna Actions.
En el panel Add Permissions, busque y seleccione la directiva creada en el paso 3 (por ejemplo,
FlinkPassRolePolicy) y luego haga clic en Confirm. Para más información, consulte Otorgar permisos a un usuario de RAM.
Paso 4: Referenciar el rol de RAM en Flink
Referencie el rol de RAM creado en el paso 2 en el namespace de Flink para que los trabajos puedan usarlo y acceder a KMS.
Inicie sesión en la consola de Realtime Compute y acceda al espacio de trabajo de destino.
En el panel de navegación izquierdo, elija .
Haga clic en la pestaña RAM Roles.
Haga clic en Reference RAM Role.
-
En el cuadro de diálogo, seleccione el rol de RAM creado en el paso 2 (por ejemplo,
FlinkRoleForKMSRead). Se admite la búsqueda aproximada por nombre de rol.NotaLa lista de roles contiene los roles de servicio estándar de la cuenta de Alibaba Cloud propietaria del namespace actual. El operador debe pertenecer a la misma cuenta de Alibaba Cloud que el namespace actual y contar con el permiso
ram:ListRolespara consultar los roles. -
Haga clic en Test. El sistema comprueba automáticamente los dos puntos siguientes:
Comprobación del permiso PassRole: verifica que el usuario actual tenga el permiso
ram:PassRolesobre el rol de RAM seleccionado.Comprobación de la directiva de confianza: confirma que el rol de RAM seleccionado confía en el namespace actual de Flink para ser asumido.
Una vez superadas las comprobaciones, haga clic en OK.
Para más información, consulte Use a RAM role to access cloud resources.
Paso 5: Usar credenciales de KMS en los trabajos
Después de completar los pasos anteriores, especifique las credenciales en el código del trabajo con el formato de referencia secret:// y configure los parámetros de conexión de KMS. Flink recupera automáticamente los valores de las credenciales durante la ejecución para acceder a la fuente de datos.
Actualmente, solo se admite Postgres CDC Connector de los motores VVR 11.8 y posteriores.
Ejemplo de Postgres CDC Connector
Trabajo SQL: el siguiente ejemplo usa una tabla de origen de Postgres CDC y aloja el nombre de usuario y la contraseña de la base de datos en una credencial de KMS. Se asume que ya se creó en KMS una credencial de base de datos llamada my-db-secret, cuyo SecretData es {"AccountName":"alice","AccountPassword":"xxx"}.
CREATE TEMPORARY TABLE postgrescdc_source (
id INT NOT NULL,
name STRING,
description STRING,
weight DECIMAL(10,3)
) WITH (
'connector' = 'postgres-cdc',
'hostname' = '<host name>',
'port' = '<port>',
'username' = 'secret://kms.my-db-secret.AccountName',
'password' = 'secret://kms.my-db-secret.AccountPassword',
'database-name' = '<database name>',
'schema-name' = '<schema name>',
'table-name' = '<table name>',
'slot.name' = '<slot name>',
'decoding.plugin.name' = 'pgoutput',
'kms.endpoint' = '<your-kms-instance-vpc-endpoint>',
'kms.ca' = 'oss://<bucket>/kms-ca.pem',
'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);
Para consultar las descripciones de los parámetros, los requisitos previos y el mapeo de tipos del conector Postgres CDC, consulte Postgres CDC connector.
Descripción de parámetros
Formato de referencia de credenciales
El formato de referencia de credenciales de KMS es secret://<provider>.<secret-name>.<key>.
|
Campo |
Descripción |
|
|
Identificador del tipo de origen de la credencial. Actualmente, solo se admite |
|
|
Nombre de la credencial en KMS, por ejemplo, |
|
|
Nombre del campo dentro del JSON de SecretData de la credencial, por ejemplo, |
Ejemplo: secret://kms.my-db-secret.AccountPassword
Parámetros de KMS
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
|
|
String |
Sí |
Dirección de la puerta de enlace de KMS (dedicada o compartida).
|
|
|
String |
Obligatorio para puertas de enlace dedicadas |
Ruta de OSS del certificado de CA.
|
|
|
String |
No |
Nombre del rol de RAM utilizado para acceder a KMS. Este rol debe referenciarse previamente en Security > RAM Roles. |