Realtime Compute for Apache Flink prend en charge l'utilisation de rôles RAM dans les namespaces. En endossant un rôle RAM, les jobs utilisent des jetons STS temporaires au lieu de paires AccessKey en clair pour accéder aux ressources Alibaba Cloud. Cette approche permet un accès sans identifiants statiques, un contrôle granulaire des autorisations et une gestion des identifiants ne nécessitant aucune maintenance.
Vue d'ensemble
En référençant un rôle RAM, vous permettez aux jobs Flink d'accéder à d'autres services Alibaba Cloud, tels que OSS et KMS, sans exposer de paires AccessKey en clair dans le code du job.
Principaux avantages :
Protection des informations sensibles : Aucune paire AccessKey n'est exposée dans les jobs. Le jeton STS du rôle RAM remplace les identifiants statiques.
Contrôle granulaire des autorisations : Les politiques d'autorisation des rôles RAM sont personnalisables. Différents connecteurs peuvent utiliser différents rôles pour appliquer le principe du moindre privilège.
Identifiants sans maintenance : Le système obtient et renouvelle automatiquement les jetons STS, éliminant ainsi la nécessité de gérer la rotation des identifiants.
Pour plus de détails, consultez l'Annexe : Flux d'appel STS.
Notes
La suppression ou la modification incorrecte des autorisations et de la politique de confiance d'un rôle RAM dans RAM peut entraîner l'échec des jobs Flink, car ils ne peuvent plus accéder aux ressources cloud. Conformément à l'Accord de niveau de service pour Realtime Compute for Apache Flink, l'indisponibilité causée par une utilisation incorrecte des ressources par les clients n'est pas couverte par le SLA.
Limites
Seuls les moteurs VVR 11.8 et versions ultérieures sont pris en charge. Le connecteur OSS et le connecteur Postgres CDC prennent en charge l'accès aux ressources cloud avec des rôles RAM.
Vous pouvez référencer jusqu'à 10 rôles RAM par espace de travail.
Une seule opération d'ajout permet de sélectionner jusqu'à 5 rôles.
Seuls les rôles de service réguliers (SR) peuvent être référencés. Les rôles liés au service (SLR) ne sont pas pris en charge.
Les jetons STS ne sont pas pris en charge pour le débogage local des jobs PyFlink et Flink JAR. Vous devez déployer les jobs sur un cluster avant de les utiliser.
Seule l'authentification d'identité RAM pour les services Alibaba Cloud est prise en charge.
Préparation des autorisations
Étapes 1 et 2 : L'opérateur doit disposer de la stratégie
AliyunRAMFullAccess, ou se voir attribuer séparément les autorisations de gestion des rôles RAM et de gestion des autorisations. Pour plus d'informations, consultez Créer une stratégie personnalisée et Vue d'ensemble des API pour la gestion des rôles RAM et la gestion des autorisations.Étape 3 : L'opérateur doit disposer des autorisations d'édition ou supérieures sur le namespace Flink, ou se voir attribuer des autorisations granulaires pour référencer des rôles RAM et développer des jobs. Pour plus de détails, consultez Accorder des autorisations pour accéder à la console de développement.
Étape 1 : Créer et configurer un rôle RAM
Ce rôle constitue l'identifiant d'identité que le service Flink utilise pour accéder à d'autres ressources cloud. Flink endosse ce rôle pour obtenir des identifiants temporaires et accéder aux ressources cloud en tant que ce rôle.
1. Créer un rôle RAM
Connectez-vous à la page Console RAM - Rôles et cliquez sur Create Role. Conservez les options par défaut (l'entité de confiance est le compte Alibaba Cloud actuel) et cliquez sur OK.
Saisissez un nom de rôle reconnaissable, par exemple
FlinkRoleForOSSRead, et cliquez sur OK.
2. Ajouter une politique de confiance
Flink endosse le rôle RAM pour obtenir des identifiants temporaires. Le rôle RAM doit faire confiance à Flink pour pouvoir l'endosser.
Après la création du rôle, sur la page des détails du rôle, cliquez sur l'onglet Trust Policy puis sur Edit Trust Policy. Ajoutez "Service": ["stream.aliyuncs.com"] à Principal pour autoriser Flink à endosser le rôle. Pour plus d'informations, consultez Modifier la politique de confiance d'un rôle RAM.
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"stream.aliyuncs.com"
]
}
}
],
"Version": "1"
}
3. Accorder des autorisations pour accéder aux ressources cloud
Flink utilise l'identité du rôle RAM pour accéder aux ressources cloud. Accordez à l'avance les autorisations nécessaires au rôle RAM afin d'éviter les erreurs d'accès.
Sur la page des détails du rôle, cliquez sur l'onglet Permissions puis sur Grant Permission pour accorder au rôle les autorisations d'accès aux ressources cloud cibles.
Par exemple, pour accéder à OSS, accordez les autorisations AliyunOSSReadOnlyAccess (lecture seule) ou AliyunOSSFullAccess (accès complet). Pour plus d'informations, consultez Accorder des autorisations à un rôle RAM.
Étape 2 : 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 1 au service Flink pour qu'il l'endosse.
Si l'utilisateur RAM de l'étape 3 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
Connectez-vous à 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 |
|
|
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. |
|
|
Permet à l'utilisateur de transmettre le rôle spécifié au service cloud Flink. Remplacez
Ajoutez une |
Cliquez sur OK pour enregistrer la stratégie, par exemple sous le nom FlinkPassRolePolicy. Pour plus d'informations, consultez Créer une stratégie personnalisée.
Accorder des autorisations à l'utilisateur RAM
Connectez-vous à la page Console RAM - Utilisateurs. Recherchez l'utilisateur RAM à autoriser et cliquez sur Add Permissions dans la colonne Actions.
Dans le panneau Add Permissions, recherchez et sélectionnez la stratégie créée à l'étape 2 (par exemple,
FlinkPassRolePolicy), puis cliquez sur Confirm. Pour plus d'informations, consultez Accorder des autorisations à un utilisateur RAM.
Étape 3 : Référencer le rôle RAM dans Flink
Les utilisateurs autorisés à l'étape 2 peuvent transmettre le rôle RAM de l'étape 1 à Flink. Flink endosse le rôle pour obtenir des identifiants temporaires et accéder aux ressources cloud en tant que ce rôle.
Ajouter une référence de rôle RAM
Connectez-vous à la console Realtime Compute et accédez à l'espace de travail cible.
Dans le volet de navigation de gauche, choisissez .
Cliquez sur l'onglet RAM Roles.
Cliquez sur Reference RAM Role.
-
Dans la boîte de dialogue, configurez les éléments suivants :
Élément
Obligatoire
Description
Rôle RAM
Oui
Sélectionnez le rôle dans la liste déroulante. La recherche floue par nom de rôle et la sélection multiple (jusqu'à 5 par opération) sont prises en charge. Les rôles référencés ne peuvent pas être sélectionnés à nouveau.
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
ListRolespour afficher les rôles.
Description
Non
Description du rôle. Jusqu'à 256 caractères.
-
-
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:PassRolesur le rôle RAM sélectionné.Vérification de la politique de confiance : Le rôle RAM sélectionné fait confiance au namespace Flink actuel pour l'endosser.
Une fois les vérifications réussies, cliquez sur OK.
Utiliser le rôle RAM dans les jobs
Après avoir référencé le rôle RAM, spécifiez le nom du rôle à l'aide du paramètre akless.assume-role.role-name dans le code du job. Flink endosse le rôle pour obtenir le jeton STS temporaire et accède aux ressources cloud en tant que ce rôle.
Seuls le connecteur OSS et le connecteur Postgres CDC des moteurs VVR 11.8 et versions ultérieures prennent en charge cette fonctionnalité.
Description des paramètres
|
Paramètre |
Type |
Obligatoire |
Description |
|
akless.assume-role.role-name |
String |
Non |
Le nom du rôle RAM, par exemple |
Règles de priorité
Si une paire AccessKey (accessKeyId + accessKeySecret) est explicitement spécifiée, elle a la priorité la plus élevée.
Si aucune paire AccessKey n'est spécifiée mais que
akless.assume-role.role-namel'est, le jeton STS du rôle est utilisé.Différents connecteurs dans un job peuvent utiliser différents rôles en spécifiant différentes valeurs pour
akless.assume-role.role-name.
Exemple OSS
Ajoutez la configuration suivante dans Other Configuration sous Runtime Parameters dans l'onglet Deployment Details :
# OSS
fs.oss.bucket.<bucketName>.akless.assume-role.role-name: <your-role-name>
fs.oss.inner.bucket: <workspace-associated-bucket-name>
# OSS-HDFS
fs.oss.jindo.akless.assume-role.role-name: <your-role-name>
|
Paramètre |
Description |
|
|
Le nom du bucket dans le paramètre de chemin du système de fichiers cible ( |
|
|
Vérifiez le champ Storage Type sur la page de liste des espaces de travail pour déterminer si l'espace de travail utilise un bucket OSS géré par l'utilisateur ou un stockage entièrement géré, et obtenez le nom du bucket en conséquence :
|
|
|
Le nom du rôle RAM utilisé pour accéder à OSS. |
Gérer les références de rôles RAM
La modification ou la suppression d'un rôle RAM dans Flink affecte uniquement la référence Flink au rôle RAM. Cela ne modifie pas directement le rôle RAM lui-même.
Modifier un rôle RAM
Sous Security Services > Access Security > RAM Roles, recherchez le rôle cible et cliquez sur Edit dans la colonne Actions.
Dans la boîte de dialogue, modifiez la description. Le nom du rôle ne peut pas être modifié.
Cliquez sur Test. Une fois les vérifications réussies, cliquez sur OK.
Supprimer un rôle RAM
Après avoir supprimé un rôle RAM, tous les jobs du namespace actuel qui référencent ce rôle échoueront. Procédez avec prudence.
Sous Security Services > Access Security > RAM Roles, recherchez le rôle cible et cliquez sur Remove dans la colonne Actions.
Dans la boîte de dialogue de confirmation, saisissez le nom du rôle et cliquez sur Confirm Removal.
Actualiser le statut du rôle
Cliquez sur Refresh dans le coin supérieur droit de la liste des rôles RAM pour vérifier en masse le statut de tous les rôles référencés.
|
Statut |
Description |
|
Normal |
Le rôle existe dans RAM et le jeton STS est valide. |
|
Anormal |
Le rôle a été supprimé de RAM, ou la politique de confiance n'autorise plus Flink à l'endosser. Les jobs référençant ce rôle peuvent rencontrer des anomalies. |
Annexe : Flux d'appel STS
Alibaba Cloud RAM propose deux modèles d'autorisation principaux liés aux rôles : l'endossement direct (AssumeRole) et l'autorisation déléguée (PassRole).
Modèle 1 : Endossement direct (sts:AssumeRole)
Action principale : Une entité de confiance (comme un utilisateur RAM ou une application) appelle activement l'API STS
AssumeRolepour obtenir des identifiants temporaires pour un rôle RAM, « devenant » ainsi ce rôle.Chaîne d'autorisation :
Entity A→Calls sts:AssumeRole→Assumes Role R→Obtains Role R permissions.Exigence d'autorisation : L'entité A doit disposer de l'autorisation
sts:AssumeRole.Scénario typique : Une application s'exécutant sur ECS ou un serveur local doit accéder temporairement à OSS. L'application utilise sa propre paire AccessKey pour appeler
AssumeRole, obtient des identifiants temporaires, puis les utilise pour accéder à OSS. Dans ce scénario, l'entité A est l'exécuteur actif.
Modèle 2 : Autorisation déléguée (ram:PassRole)
Action principale : Une entité (comme un utilisateur RAM) « transmet » un rôle RAM à un service cloud (comme Flink), autorisant le service à endosser le rôle. L'utilisateur n'endosse pas le rôle.
Chaîne d'autorisation : User_B → Transmet Role_A → Au service cloud → Le service cloud appelle
sts:AssumeRolepour endosser Role_A → Le service cloud obtient les autorisations de Role_A.Exigence d'autorisation : L'utilisateur B doit disposer de l'autorisation
ram:PassRole, et le rôle A doit faire confiance au service cloud pour l'endosser.Scénario typique : Un développeur (User_B) développe un job dans la console Flink et spécifie un rôle (Role_A). Pour permettre au service Flink d'accéder aux ressources cloud au nom de l'utilisateur, celui-ci doit disposer de l'autorisation de transmettre Role_A au service Flink. Dans ce scénario, l'utilisateur est l'autorisateur et le service cloud est l'exécuteur.
Exemple : Flink accédant à OSS
Le flux d'interaction du modèle d'autorisation déléguée (PassRole) comprend une phase de configuration et une phase d'exécution :
-
Phase de configuration :
L'administrateur RAM effectue la configuration de base, notamment la création du rôle, la configuration de ses autorisations et de sa relation de confiance, et l'attribution de l'autorisation
PassRoleà l'utilisateur.L'utilisateur ajoute une référence de rôle RAM dans Flink. La plateforme Flink vérifie que l'utilisateur est autorisé à « transmettre » le rôle et que le rôle fait confiance à Flink pour l'endosser.
-
Phase d'exécution :
Le service endosse le rôle : Le service Flink (
stream.aliyuncs.com), en tant qu'endosseur réel du rôle, envoie une requêteAssumeRoleà STS.Autorisation STS et exécution du service : STS confirme que Flink est approuvé par le rôle A, puis émet des identifiants temporaires. Le service Flink utilise ces identifiants pour accéder à OSS et accomplir la tâche déléguée par l'utilisateur.