Todos os produtos
Search
Central de documentação

Realtime Compute for Apache Flink:KMS credential management integration (Beta)

Última atualização: Sep 24, 2026

O Realtime Compute for Apache Flink permite referenciar credenciais hospedadas no Alibaba Cloud Key Management Service (KMS) nos jobs, substituindo nomes de usuário e senhas em texto simples (user-pwd) ao acessar sources de dados. Isso proporciona a hospedagem de credenciais criptografadas, evita a exposição de texto simples e permite o gerenciamento de credenciais sem necessidade de manutenção.

Visão geral

Com a integração do gerenciamento de credenciais do KMS, é possível referenciar credenciais hospedadas no KMS (como nomes de usuário e senhas de bancos de dados) em jobs do Flink sem expor credenciais em texto simples no código do job. Durante a execução, o Flink assume uma função do RAM para obter um token STS temporário, chama o KMS para recuperar o valor real da credencial e, em seguida, se conecta ao source de dados de destino.

Principais benefícios:

  • Proteção de informações confidenciais: Nenhuma credencial (user-pwd) em texto simples fica exposta nos jobs. As credenciais ficam hospedadas de forma criptografada no KMS.

  • Credenciais sem necessidade de manutenção: Com a rotação de credenciais do KMS, o Flink obtém automaticamente o valor mais recente da credencial após as atualizações. O código do job não requer modificações.

Observações

Excluir credenciais incorretamente no KMS pode causar falhas nos jobs do Flink. O mesmo ocorre se você excluir ou modifique incorretamente as permissões e a política de confiança de uma função do RAM, pois os jobs não conseguirão obter as credenciais do KMS. De acordo com o Contrato de Nível de Serviço do Realtime Compute for Apache Flink, o SLA não cobre a indisponibilidade causada pelo uso incorreto de recursos pelos clientes.

Limites

  • Apenas o Postgres CDC Connector (VVR 11.8 e posterior) e o Kafka Connector (VVR 11.9 e posterior) permitem o acesso a recursos da cloud com credenciais do KMS.

  • A quantidade de funções do RAM referenciadas para acessar o KMS possui um limite. Para mais detalhes, consulte Use a RAM role to access cloud resources.

Preparação de permissões

  • Etapa 1 (crie uma credencial do KMS): O operador deve ter permissões de gerenciamento de credenciais do KMS.

  • Etapas 2 e 3: O operador deve ter a política AliyunRAMFullAccess atribuída ou receber separadamente as permissões de gerenciamento de funções e de permissões do RAM. Para mais informações, consulte Crie uma política personalizada.

  • Etapas 4 e 5 (referenciar uma função no Flink e desenvolver jobs): O operador deve ter permissões de editor ou superiores no namespace do Flink, ou receber permissões de granularidade fina para referenciar funções do RAM, gerencie arquivos e desenvolva jobs. Para mais detalhes, consulte Grant permissions to access the development console.

Etapa 1: Crie uma credencial do KMS

O KMS oferece vários tipos de credenciais. As etapas a seguir usam uma credencial do RDS como exemplo:

  1. Acesse o console do Key Management Service. Selecione a região na barra de menus superior e, no painel de navegação à esquerda, escolha Resources > Secrets.

  2. Na aba Self-Managed Secrets, na área Secret Type, clique em Database Secret.

  3. Acima da lista à direita, clique em Create Single Secret na opção Create Database Secret, conclua a configuração e clique em OK.

Para obter mais informações, consulte Introdução ao Secrets Manager e Gerencie e use secrets do ApsaraDB RDS.

Etapa 2: Crie e configure uma função do RAM

Essa função é a credencial de identidade que o service do Flink usa para acessar o KMS. O Flink assume a função para obter credenciais temporárias e chama o KMS usando a função para recuperar os valores das credenciais. Para saber mais sobre o acesso sem credenciais ao KMS, consulte o apêndice de Use a RAM role to access cloud resources.

1. Crie uma função do RAM

  1. Acesse a página RAM console - Roles e clique em Create Role. Mantenha as opções padrão e clique em OK.

  2. Insira um nome descritivo para a função, por exemplo, FlinkRoleForKMSRead, e clique em OK.

2. Adicionar uma política de confiança

Depois de criar a função, na página de detalhes da função, clique em aba Trust Policy e clique em Edit Trust Policy. Adicione "Service": ["stream.aliyuncs.com"] a Principal para autorizar o Flink a assumir a função. Para mais detalhes, consulte Modify the trust policy of a RAM role.

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "stream.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

3. Conceder permissões de acesso ao KMS para a função do RAM

Quando o Flink assume a função, ele chama o KMS usando a função. Conceda antecipadamente as permissões necessárias do KMS à política de permissões da função.

Na página de detalhes da função, clique em aba Permissions e clique em Grant Permission. Adicione a política AliyunKMSSecretUserAccess (que concede permissão para recuperar credenciais no KMS). Se as credenciais forem criptografadas com uma chave mestra do cliente (CMK), conceda também a permissão kms:Decrypt adicionando a política AliyunKMSCryptoUserAccess.

Para controlar as permissões no nível da chave e da credencial, crie uma política personalizada que conceda as permissões GetSecretValue e Decrypt e restrinja o acesso aos recursos especificados. Para mais informações, consulte Referência de política personalizada do KMS e Crie uma política 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>"
    }
  ]
}

Etapa 3: Conceder permissões a um usuário do RAM

Crie uma política de permissões e conceda-a ao usuário do RAM. Isso permite que o usuário transfira a função do RAM criada na Etapa 2 para o service do Flink assumir.

Nota

Se o usuário do RAM na Etapa 4 já estiver associado à política AliyunRAMFullAccess ou AliyunStreamFullAccess, o usuário já tem a permissão PassRole. Pule esta etapa.

Crie uma política de permissões

Acesse a página RAM console - Policies e clique em Create Policy. Alterne para o modo Script e edite o conteúdo da política.

{
  "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"
        }
      }
    }
  ]
}

Permissão

Descrição

ram:ListRoles

Permite que o usuário visualize a lista de funções da conta, permitindo selecionar a função no console do Flink.

ram:PassRole

Permite que o usuário transfira a função especificada para o service da cloud do Flink. Substitua <account-id> e <role-name> na política pelos valores reais:

  • <account-id>: O UID da conta Alibaba Cloud.

  • <role-name>: O nome da função do RAM criada na Etapa 2.

Adicione uma Condition para restringir a transferência da função apenas para stream.aliyuncs.com.

Clique em OK e salve a política, por exemplo, como FlinkPassRolePolicy. Para obter mais informações, consulte Crie uma política personalizada.

Conceder permissões ao usuário do RAM

  1. Acesse a página RAM console - Users. Encontre o usuário do RAM a ser autorizado e clique em Add Permissions na coluna Actions.

  2. No painel Add Permissions, pesquise e selecione a política criada na Etapa 3 (por exemplo, FlinkPassRolePolicy) e clique em Confirm e confirme. Para mais detalhes, consulte Conceder permissões a um usuário do RAM.

Etapa 4: Referenciar a função do RAM no Flink

Referencie a função do RAM criada na Etapa 2 no namespace do Flink para que os jobs possam usá-la no acesso ao KMS.

  1. Acesse o console do Realtime Compute e entre no workspace de destino.

  2. No painel de navegação à esquerda, escolha Security > Security.

  3. Clique em aba RAM Roles.

  4. Clique em Reference RAM Role.

  5. Na caixa de diálogo, selecione a função do RAM criada na Etapa 2 (por exemplo, FlinkRoleForKMSRead). O sistema oferece suporte à pesquisa aproximada por nome de função.

    Nota

    A lista de funções contém funções de service regulares na conta Alibaba Cloud proprietária do namespace atual. O operador deve pertencer à mesma conta Alibaba Cloud do namespace atual e ter a permissão ram:ListRoles para visualize as funções.

  6. Clique em Test. O sistema verifica automaticamente os dois itens a seguir:

    • Verificação de permissão PassRole: O usuário atual tem a permissão ram:PassRole na função do RAM selecionada.

    • Verificação de política de confiança: A função do RAM selecionada permite que o namespace atual do Flink a assuma.

  7. Após a aprovação das verificações, clique em OK.

Para mais informações, consulte Use a RAM role to access cloud resources.

Etapa 5: Usar credenciais do KMS em jobs

Depois de concluir as etapas anteriores, especifique as credenciais usando o formato de referência secret:// no código do job e configure os parâmetros de conexão do KMS. O Flink recupera automaticamente os valores das credenciais durante a execução para acessar o source de dados.

Exemplo do Postgres CDC Connector

Job SQL: O exemplo a seguir usa uma tabela source do Postgres CDC e hospeda o nome de usuário e a senha do banco de dados com uma credencial do KMS. Uma credencial de banco de dados chamada my-db-secret foi criada no KMS, com o SecretData {"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 as descrições de parâmetros, pré-requisitos e mapeamento de tipos do conector Postgres CDC, consulte Postgres CDC connector.

Exemplo do Kafka Connector

A configuração SASL JAAS referencia as credenciais do Kafka. Substitua os valores de username e password em properties.sasl.jaas.config por referências secret://. Os demais parâmetros do Kafka permanecem inalterados. Uma credencial chamada my-kafka-secret foi criada no KMS, com o SecretData {"AccountName":"<SASL username>","AccountPassword":"<SASL password>"}.

Job SQL: O exemplo a seguir usa uma tabela source do Kafka. Configure uma tabela de resultados da mesma maneira.

CREATE TEMPORARY TABLE kafka_source (
  order_id BIGINT,
  user_id BIGINT,
  amount INT,
  payload STRING
) WITH (
  'connector' = 'kafka',
  'topic' = '<topic name>',
  'properties.bootstrap.servers' = '<broker 1>,<broker 2>,<broker 3>',
  'properties.group.id' = '<group id>',
  'scan.startup.mode' = 'earliest-offset',
  'format' = 'csv',
  'properties.security.protocol' = 'SASL_PLAINTEXT',
  'properties.sasl.mechanism' = 'PLAIN',
  /* Reference KMS credentials in username and password */
  'properties.sasl.jaas.config' = 'org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";',
  'kms.endpoint' = 'kms.cn-beijing.aliyuncs.com',
  'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);

Job YAML de ingestão de dados: O source e o destino especificam os parâmetros do KMS separadamente. O source usa um gateway compartilhado e o destino usa um gateway dedicado, portanto, este exemplo abrange ambos.

source:
  type: kafka
  name: Kafka Source
  topic: <topic name>
  value.format: json
  scan.startup.mode: earliest-offset
  properties.bootstrap.servers: <broker 1>,<broker 2>,<broker 3>
  properties.group.id: <group id>
  properties.security.protocol: SASL_PLAINTEXT
  properties.sasl.mechanism: PLAIN
  properties.sasl.jaas.config: org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";
  # Shared gateway: the endpoint is fixed per region, and kms.ca is not required
  kms.endpoint: kms.cn-beijing.aliyuncs.com
  kms.akless.assume-role.role-name: FlinkRoleForKMSRead

sink:
  type: kafka
  name: Kafka Sink
  properties.bootstrap.servers: <broker 1>,<broker 2>,<broker 3>
  # ApsaraMQ for Kafka does not support idempotent writes. Disable idempotence on VVR 8.0.0 and later
  properties.enable.idempotence: false
  properties.security.protocol: SASL_PLAINTEXT
  properties.sasl.mechanism: PLAIN
  properties.sasl.jaas.config: org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";
  # Dedicated gateway: kms.ca is also required
  kms.endpoint: <your-kms-instance-vpc-endpoint>
  kms.ca: oss://flink-fullymanaged-<workspace-id>/artifacts/namespaces/<namespace>/PrivateKmsCA_kst-******.pem
  kms.akless.assume-role.role-name: FlinkRoleForKMSRead
Nota
  • No YAML, o valor de properties.sasl.jaas.config contém aspas duplas. Mantenha-as como estão, sem usar escape.

  • Obtenha os endereços do endpoint e a porta para acesso SASL no console do ApsaraMQ for Kafka.

Para os parâmetros completos e configurações de segurança do conector Kafka, consulte Kafka SQL connector e Kafka YAML connector.

Descrição dos parâmetros

Formato de referência de credencial

O formato de referência de credencial do KMS é secret://<provider>.<secret-name>.<key>.

Campo

Descrição

<provider>

O identificador do tipo de source da credencial. Atualmente, há suporte apenas para kms.

<secret-name>

O nome da credencial no KMS, por exemplo, my-db-secret.

<key>

O nome do campo no JSON SecretData da credencial, por exemplo, AccountName ou AccountPassword.

Exemplo: secret://kms.my-db-secret.AccountPassword

Parâmetros do KMS

Parâmetro

Tipo

Obrigatório

Descrição

kms.endpoint

String

Sim

O endereço do gateway do KMS (gateway dedicado ou gateway compartilhado).

  • Gateway dedicado:

    • Na página Instance Management do KMS, clique em aba Software Key Management ou Hardware Key Management e selecione a instância do KMS de destino.

    • Clique em ID da instância para acessar a página de detalhes e visualize o endereço VPC da instância, que é o endpoint. Para mais informações, consulte Service endpoints.

  • Gateway compartilhado: o endpoint é fixo por região e pode ser obtido em Service endpoints.

kms.ca

String

Obrigatório para gateways dedicados

O caminho do OSS para o certificado CA.

  1. Baixe o certificado CA na página de detalhes da instância do KMS. O nome padrão do arquivo baixado é PrivateKmsCA_kst-.pem.

  2. Faça o upload do certificado usando os Artifacts do Flink e copie o caminho do OSS no formato oss://bucket/path.

kms.akless.assume-role.role-name

String

Não

O nome da função do RAM usada para acessar o KMS. A função deve ser referenciada antecipadamente em Security > RAM Roles.