Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Intégration de la gestion des identifiants KMS (bêta)

Dernière mise à jour :Sep 24, 2026

Realtime Compute for Apache Flink permet de référencer dans les jobs des identifiants hébergés dans Alibaba Cloud Key Management Service (KMS), en remplacement des noms d'utilisateur et mots de passe en texte clair (user-pwd) lors de l'accès aux sources de données. Cette approche offre un hébergement chiffré des identifiants, évite l'exposition de données sensibles en clair et permet une gestion des identifiants sans maintenance.

Présentation

Grâce à l'intégration de la gestion des identifiants KMS, vous pouvez référencer des identifiants hébergés dans KMS (tels que les noms d'utilisateur et mots de passe de base de données) dans vos jobs Flink sans exposer ces informations en texte clair dans le code du job. Au moment de l'exécution, Flink endosse un rôle RAM pour obtenir un jeton STS temporaire, appelle KMS afin de récupérer la valeur réelle de l'identifiant, puis se connecte à la source de données cible.

Principaux avantages :

  • Protection des informations sensibles : Aucun mot de passe ou nom d'utilisateur en texte clair n'est exposé dans les jobs. Les identifiants sont hébergés de manière chiffrée dans KMS.

  • Identifiants sans maintenance : Avec la rotation des identifiants KMS, Flink récupère automatiquement la dernière valeur de l'identifiant après chaque mise à jour. Le code du job ne nécessite aucune modification.

Remarques

La suppression incorrecte d'identifiants dans KMS, ou la modification ou suppression erronée des autorisations et de la politique d'approbation d'un rôle RAM dans RAM, peut entraîner l'échec des jobs Flink, car ceux-ci ne parviennent pas à obtenir les identifiants KMS. Conformément à l'Accord de niveau de service pour Realtime Compute for Apache Flink, les indisponibilités causées par une utilisation incorrecte des ressources par les clients ne sont pas couvertes par l'SLA.

Limites

  • Seuls le connecteur Postgres CDC (VVR 11.8 et versions ultérieures) et le connecteur Kafka (VVR 11.9 et versions ultérieures) prennent en charge l'accès aux ressources cloud avec des identifiants KMS.

  • Le nombre de rôles RAM référencés pour accéder à KMS est limité. Pour plus de détails, consultez la rubrique Utiliser un rôle RAM pour accéder aux ressources cloud.

Préparation des autorisations

  • Étape 1 (création d'un identifiant KMS) : L'opérateur doit disposer des autorisations de gestion des identifiants KMS.

  • Étapes 2 et 3 : L'opérateur doit se voir attribuer la stratégie AliyunRAMFullAccess, ou recevoir séparément les autorisations de gestion des rôles RAM et de gestion des autorisations. Pour plus d'informations, consultez la page Créer une stratégie personnalisée.

  • Étapes 4 et 5 (référencement d'un rôle dans Flink et développement de jobs) : L'opérateur doit disposer des autorisations d'édition ou supérieures sur le namespace Flink, ou se voir attribuer des autorisations fines pour référencer des rôles RAM, gérer des fichiers et développer des jobs. Pour plus de détails, consultez la rubrique Accorder des autorisations pour accéder à la console de développement.

Étape 1 : Créer un identifiant KMS

KMS propose plusieurs types d'identifiants. Les étapes suivantes utilisent un identifiant RDS à titre d'exemple :

  1. Connectez-vous à la console Key Management Service. Sélectionnez la région dans la barre de menus supérieure, puis dans le volet de navigation de gauche, choisissez Resources > Secrets.

  2. Dans l'onglet Self-Managed Secrets, zone Secret Type, cliquez sur Database Secret.

  3. Au-dessus de la liste à droite, sous Create Database Secret, cliquez sur Create Single Secret, complétez la configuration, puis cliquez sur OK.

Pour plus d'informations, consultez les rubriques Prise en main de Secrets Manager et Gérer et utiliser les secrets ApsaraDB RDS.

Étape 2 : Créer et configurer un rôle RAM

Ce rôle constitue l'identité que le service Flink utilise pour accéder à KMS. Flink endosse ce rôle pour obtenir des identifiants temporaires et appelle KMS en tant que ce rôle afin de récupérer les valeurs des identifiants. Pour plus de détails sur l'accès sans identifiant à KMS, consultez l'annexe de la rubrique Utiliser un rôle RAM pour accéder aux ressources cloud.

1. Créer un rôle RAM

  1. Accédez à la page Console RAM - Rôles et cliquez sur Create Role. Conservez les options par défaut et cliquez sur OK.

  2. Saisissez un nom de rôle reconnaissable, par exemple FlinkRoleForKMSRead, puis cliquez sur OK.

2. Ajouter une politique d'approbation

Une fois le rôle créé, accédez à sa page de détails, cliquez sur l'onglet Trust Policy, puis sur Edit Trust Policy. Ajoutez "Service": ["stream.aliyuncs.com"] à Principal afin d'autoriser Flink à endosser le rôle. Pour plus d'informations, consultez la rubrique Modifier la politique d'approbation d'un rôle RAM.

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

3. Accorder des autorisations d'accès KMS au rôle RAM

Une fois que Flink a endossé le rôle, il appelle KMS en utilisant cette identité. Accordez préalablement les autorisations KMS requises à la stratégie d'autorisations du rôle.

Sur la page de détails du rôle, cliquez sur l'onglet Permissions, puis sur Grant Permission. Ajoutez la stratégie AliyunKMSSecretUserAccess (qui accorde l'autorisation de récupérer des identifiants dans KMS). Si les identifiants sont chiffrés avec une clé maître cliente (CMK), accordez également l'autorisation kms:Decrypt en ajoutant la stratégie AliyunKMSCryptoUserAccess.

Pour contrôler les autorisations au niveau des clés et des identifiants, créez une stratégie personnalisée accordant les autorisations GetSecretValue et Decrypt et restreignant la ressource aux éléments spécifiés. Pour plus de détails, consultez les références Référence des stratégies personnalisées KMS et Créer une stratégie personnalisée.

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

Étape 3 : Accorder des autorisations à un utilisateur RAM

Créez une stratégie d'autorisation et attribuez-la à l'utilisateur RAM. Cela permet à l'utilisateur de transmettre le rôle RAM créé à l'étape 2 au service Flink pour qu'il l'endosse.

Remarque

Si l'utilisateur RAM de l'étape 4 est déjà associé à la stratégie AliyunRAMFullAccess ou AliyunStreamFullAccess, il dispose déjà de l'autorisation PassRole. Vous pouvez ignorer cette étape.

Créer une stratégie d'autorisation

Accédez à la page Console RAM - Stratégies et cliquez sur Create Policy. Basculez vers le mode Script et modifiez le contenu de la stratégie.

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

Autorisation

Description

ram:ListRoles

Permet à l'utilisateur d'afficher la liste des rôles sous le compte, afin de pouvoir sélectionner le rôle dans la console Flink.

ram:PassRole

Permet à l'utilisateur de transmettre le rôle spécifié au service cloud Flink. Remplacez <account-id> et <role-name> dans la stratégie par les valeurs réelles :

  • <account-id> : L'UID du compte Alibaba Cloud.

  • <role-name> : Le nom du rôle RAM créé à l'étape 2.

Ajoutez une Condition pour restreindre la transmission du rôle uniquement à stream.aliyuncs.com.

Cliquez sur OK pour enregistrer la stratégie, par exemple sous le nom FlinkPassRolePolicy. Pour plus d'informations, consultez la page Créer une stratégie personnalisée.

Accorder des autorisations à l'utilisateur RAM

  1. Accédez à la page Console RAM - Utilisateurs. Recherchez l'utilisateur RAM à autoriser et cliquez sur Add Permissions dans la colonne Actions.

  2. Dans le panneau Add Permissions, recherchez et sélectionnez la stratégie créée à l'étape 3 (par exemple, FlinkPassRolePolicy), puis cliquez sur Confirm. Pour plus d'informations, consultez la page Accorder des autorisations à un utilisateur RAM.

Étape 4 : Référencer le rôle RAM dans Flink

Référencez le rôle RAM créé à l'étape 2 dans le namespace Flink afin que les jobs puissent utiliser ce rôle pour accéder à KMS.

  1. Connectez-vous à la console Realtime Compute et accédez à l'espace de travail cible.

  2. Dans le volet de navigation de gauche, choisissez Security > Security.

  3. Cliquez sur l'onglet RAM Roles.

  4. Cliquez sur Reference RAM Role.

  5. Dans la boîte de dialogue, sélectionnez le rôle RAM créé à l'étape 2 (par exemple, FlinkRoleForKMSRead). La recherche floue par nom de rôle est prise en charge.

    Remarque

    La liste des rôles contient les rôles de service réguliers sous le compte Alibaba Cloud propriétaire du namespace actuel. L'opérateur doit appartenir au même compte Alibaba Cloud que le namespace actuel et disposer de l'autorisation ram:ListRoles pour afficher les rôles.

  6. Cliquez sur Test. Le système vérifie automatiquement les deux éléments suivants :

    • Vérification de l'autorisation PassRole : L'utilisateur actuel dispose de l'autorisation ram:PassRole sur le rôle RAM sélectionné.

    • Vérification de la politique d'approbation : Le rôle RAM sélectionné approuve le namespace Flink actuel pour l'endosser.

  7. Une fois les vérifications réussies, cliquez sur OK.

Pour plus d'informations, consultez la rubrique Utiliser un rôle RAM pour accéder aux ressources cloud.

Étape 5 : Utiliser les identifiants KMS dans les jobs

Une fois les étapes précédentes terminées, spécifiez les identifiants en utilisant le format de référence secret:// dans le code du job et configurez les paramètres de connexion KMS. Flink récupère automatiquement les valeurs des identifiants au moment de l'exécution pour accéder à la source de données.

Exemple avec le connecteur Postgres CDC

Job SQL : L'exemple suivant utilise une table source Postgres CDC et héberge le nom d'utilisateur et le mot de passe de la base de données avec un identifiant KMS. Un identifiant de base de données nommé my-db-secret a été créé dans KMS, avec les données 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'
);

Pour les descriptions des paramètres, les prérequis et le mappage des types du connecteur Postgres CDC, consultez la rubrique Connecteur Postgres CDC.

Exemple avec le connecteur Kafka

Les identifiants Kafka sont référencés dans la configuration SASL JAAS. Remplacez les valeurs username et password dans properties.sasl.jaas.config par des références secret://. Les autres paramètres Kafka restent identiques. Un identifiant nommé my-kafka-secret a été créé dans KMS, avec les données SecretData {"AccountName":"<SASL username>","AccountPassword":"<SASL password>"}.

Job SQL : L'exemple suivant utilise une table source Kafka. Configurez une table de résultat de la même manière.

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 d'ingestion de données : La source et le puits spécifient les paramètres KMS séparément. La source utilise une passerelle partagée et le puits utilise une passerelle dédiée, cet exemple couvre donc les deux cas.

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
Remarque
  • En YAML, la valeur de properties.sasl.jaas.config contient des guillemets doubles. Écrivez-les tels quels, sans échappement.

  • Obtenez les adresses de point de terminaison et le port pour l'accès SASL depuis la console ApsaraMQ for Kafka.

Pour la liste complète des paramètres et des paramètres de sécurité du connecteur Kafka, consultez les rubriques Connecteur SQL Kafka et Connecteur YAML Kafka.

Description des paramètres

Format de référence des identifiants

Le format de référence des identifiants KMS est secret://<provider>.<secret-name>.<key>.

Champ

Description

<provider>

L'identifiant du type de source d'identifiant. Actuellement, seul kms est pris en charge.

<secret-name>

Le nom de l'identifiant dans KMS, par exemple my-db-secret.

<key>

Le nom du champ dans le JSON SecretData de l'identifiant, par exemple AccountName ou AccountPassword.

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

Paramètres KMS

Paramètre

Type

Obligatoire

Description

kms.endpoint

String

Oui

L'adresse de la passerelle KMS (passerelle dédiée ou partagée).

  • Passerelle dédiée :

    • Sur la page Instance Management de KMS, cliquez sur l'onglet Software Key Management ou Hardware Key Management, puis sélectionnez l'instance KMS cible.

    • Cliquez sur l'ID de l'instance pour accéder à la page de détails et afficher l'adresse VPC de l'instance, qui correspond au point de terminaison. Pour plus d'informations, consultez Points de terminaison de service.

  • Passerelle partagée : le point de terminaison est fixe par région et peut être obtenu à partir de Points de terminaison de service.

kms.ca

String

Requis pour les passerelles dédiées

Le chemin OSS du certificat CA.

  1. Téléchargez le certificat CA depuis la page de détails de l'instance KMS. Le fichier téléchargé est nommé par défaut PrivateKmsCA_kst-.pem.

  2. Téléversez le certificat en utilisant les Artifacts de Flink, puis copiez le chemin OSS au format oss://bucket/path.

kms.akless.assume-role.role-name

String

Non

Le nom du rôle RAM utilisé pour accéder à KMS. Le rôle doit être préalablement référencé sous Security > RAM Roles.