E-MapReduce (EMR) associe automatiquement un rôle d'application ECS nommé MetaService à chaque cluster que vous créez. Les tâches et les applications exécutées sur le cluster utilisent ce rôle pour accéder aux ressources Alibaba Cloud. Aucune paire AccessKey n'est requise dans les fichiers de configuration ou le code, ce qui élimine le risque d'exposition des identifiants.
MetaService permet d'accéder aux services suivants sans utiliser de paire AccessKey :
| Service | Activé par défaut |
|---|---|
| Object Storage Service (OSS) | Oui |
| Log Service | Non — nécessite des autorisations RAM supplémentaires |
| Message Service (MNS) | Non — nécessite des autorisations RAM supplémentaires |
Pour activer l'accès à Log Service ou MNS, accordez les autorisations requises au rôle AliyunEmrEcsDefaultRole dans la console RAM. Pour plus d'informations, consultez la rubrique Accorder des autorisations à un rôle RAM.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Autorisé le rôle. Pour plus d'informations, consultez la rubrique Attribuer des rôles à un compte Alibaba Cloud
Fonctionnement de MetaService
Lorsqu'une tâche ou une application appelle un service Alibaba Cloud pris en charge, MetaService fournit en arrière-plan un identifiant temporaire Security Token Service (STS). Aucune paire AccessKey n'est nécessaire dans votre code ou votre configuration.
Rotation des identifiants STS : Un nouvel identifiant temporaire STS est généré 30 minutes avant l'expiration de l'identifiant actuel. Les deux identifiants restent valides pendant cette fenêtre de chevauchement de 30 minutes.
Autorisations par défaut
Le rôle AliyunEmrEcsDefaultRole est configuré avec la stratégie AliyunEmrECSRolePolicy, qui accorde les autorisations suivantes.
Autorisations OSS
| Autorisation (Action) | Description |
|---|---|
| oss:PutObject | Télécharge un fichier ou un dossier |
| oss:GetObject | Interroge un fichier ou un dossier |
| oss:ListObjects | Interroge les fichiers |
| oss:DeleteObject | Supprime un fichier |
| oss:ListBuckets | Interroge les buckets |
| oss:AbortMultipartUpload | Met fin à un événement de téléchargement multipartie |
| oss:ListMultipartUploads | Interroge tous les événements de téléchargement multipartie en cours |
| oss:RestoreObject | Restaure un objet Archive ou Cold Archive |
| oss:GetBucketInfo | Interroge les informations relatives à un bucket |
| oss:ListObjectVersions | Interroge les versions de tous les objets d'un bucket, y compris les marqueurs de suppression |
| oss:DeleteObjectVersion | Supprime une version spécifique d'un objet |
| oss:PostDataLakeStorageFileOperation | Accède à OSS-HDFS |
Autorisations Tablestore
| Autorisation (Action) | Description |
|---|---|
| ots:CreateTable | Crée une table basée sur le schéma de table spécifié |
| ots:DeleteTable | Supprime une table spécifique de l'instance actuelle |
| ots:GetRow | Lit les données d'une seule ligne en fonction d'une clé primaire spécifique |
| ots:PutRow | Insère des données dans une ligne spécifique |
| ots:UpdateRow | Met à jour les données d'une ligne spécifique |
| ots:DeleteRow | Supprime une ligne de données |
| ots:GetRange | Lit les données comprises dans une plage de valeurs spécifique de la clé primaire |
| ots:BatchWriteRow | Insère, modifie ou supprime plusieurs lignes de données d'une ou plusieurs tables en une seule fois |
| ots:BatchGetRow | Lit plusieurs lignes de données d'une ou plusieurs tables en une seule fois |
| ots:ComputeSplitPointsBySize | Divise logiquement les données d'une table en plusieurs shards dont les tailles sont proches de la taille spécifiée, et renvoie les points de division entre les shards ainsi que des indications sur les hôtes où résident les partitions |
| ots:StartLocalTransaction | Crée une transaction locale basée sur une valeur de clé de partition spécifiée et interroge l'ID de la transaction locale |
| ots:CommitTransaction | Valide une transaction locale |
| ots:AbortTransaction | Abandonne une transaction locale |
Autorisations Data Lake Formation (DLF)
| Autorisation (Action) | Description |
|---|---|
| dlf:BatchCreatePartitions | Crée plusieurs partitions en une seule fois |
| dlf:BatchCreateTables | Crée plusieurs tables en une seule fois |
| dlf:BatchDeletePartitions | Supprime plusieurs partitions en une seule fois |
| dlf:BatchDeleteTables | Supprime plusieurs tables en une seule fois |
| dlf:BatchGetPartitions | Interroge les informations relatives à plusieurs partitions en une seule fois |
| dlf:BatchGetTables | Interroge les informations relatives à plusieurs tables en une seule fois |
| dlf:BatchUpdatePartitions | Met à jour plusieurs partitions en une seule fois |
| dlf:BatchUpdateTables | Met à jour plusieurs tables en une seule fois |
| dlf:CreateDatabase | Crée une base de données |
| dlf:CreateFunction | Crée une fonction |
| dlf:CreatePartition | Crée une partition |
| dlf:CreateTable | Crée une table |
| dlf:DeleteDatabase | Supprime une base de données |
| dlf:DeleteFunction | Supprime une fonction |
| dlf:DeletePartition | Supprime une partition |
| dlf:DeleteTable | Supprime une table |
| dlf:GetDatabase | Interroge les informations relatives à une base de données |
| dlf:GetFunction | Interroge les informations relatives à une fonction |
| dlf:GetPartition | Interroge les informations relatives à une partition |
| dlf:GetTable | Interroge les informations relatives à une table |
| dlf:ListCatalogs | Interroge les catalogues |
| dlf:ListDatabases | Interroge les bases de données |
| dlf:ListFunctionNames | Interroge les noms des fonctions |
| dlf:ListFunctions | Interroge les fonctions |
| dlf:ListPartitionNames | Interroge les noms des partitions |
| dlf:ListPartitions | Interroge les partitions |
| dlf:ListPartitionsByExpr | Interroge les partitions de la table de métadonnées selon des conditions |
| dlf:ListPartitionsByFilter | Interroge les partitions de la table de métadonnées selon des conditions |
| dlf:ListTableNames | Interroge les noms des tables |
| dlf:ListTables | Interroge les tables |
| dlf:RenamePartition | Renomme une partition |
| dlf:RenameTable | Renomme une table |
| dlf:UpdateDatabase | Met à jour une base de données |
| dlf:UpdateFunction | Met à jour une fonction |
| dlf:UpdateTable | Met à jour une table |
| dlf:UpdateTableColumnStatistics | Met à jour les statistiques d'une table de métadonnées |
| dlf:GetTableColumnStatistics | Interroge les statistiques d'une table de métadonnées |
| dlf:DeleteTableColumnStatistics | Supprime les statistiques d'une table de métadonnées |
| dlf:UpdatePartitionColumnStatistics | Met à jour les statistiques d'une partition |
| dlf:GetPartitionColumnStatistics | Interroge les statistiques d'une partition |
| dlf:DeletePartitionColumnStatistics | Supprime les statistiques d'une partition |
| dlf:BatchGetPartitionColumnStatistics | Interroge les statistiques de plusieurs partitions en une seule fois |
| dlf:CreateLock | Crée un verrou de métadonnées |
| dlf:UnLock | Déverrouille un verrou de métadonnées spécifique |
| dlf:AbortLock | Abandonne un verrou de métadonnées |
| dlf:RefreshLock | Actualise un verrou de métadonnées |
| dlf:GetLock | Interroge les informations relatives à un verrou de métadonnées |
| dlf:GetAsyncTaskStatus | Interroge l'état d'une tâche asynchrone |
| dlf:DeltaGetPermissions | Interroge les autorisations |
| dlf:GetPermissions | Interroge les informations relatives aux autorisations de données |
| dlf:GetServiceInfo | Interroge les informations relatives à un service |
| dlf:GetRoles | Interroge les informations relatives aux rôles dans les autorisations de données |
| dlf:CheckPermissions | Vérifie les autorisations de données |
Utilisation de MetaService
Choisissez l'approche adaptée à votre charge de travail :
| Scénario | Approche | Résultat |
|---|---|---|
| Tâches exécutées sur le cluster (Hadoop, Hive, Spark) | Utilisez des chemins OSS simplifiés | Accès à OSS sans identifiants dans le chemin |
| Services gérés manuellement ou applications personnalisées | Appelez l'API HTTP MetaService | Identifiants temporaires STS pour OSS, Log Service et MNS |
Accès à OSS depuis les tâches du cluster
Lorsque MetaService est actif, utilisez le format de chemin simplifié dans n'importe quelle tâche du cluster :
oss://<bucket-name>/<object-path>
MetaService gère l'authentification automatiquement. Vous n'avez pas besoin d'intégrer les identifiants dans le chemin. Cela améliore également votre expérience lors de l'interaction avec les ressources OSS, car le chemin OSS à saisir est considérablement plus court.
Hadoop — répertorier les objets :
# Without MetaService (credentials embedded in path)
hadoop fs -ls oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c
# With MetaService (simplified path)
hadoop fs -ls oss://bucket/a/b/c
Hive — créer une table externe sauvegardée par OSS :
-- Without MetaService (credentials embedded in path)
CREATE EXTERNAL TABLE test_table(id INT, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t'
LOCATION 'oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c';
-- With MetaService (simplified path)
CREATE EXTERNAL TABLE test_table(id INT, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t'
LOCATION 'oss://bucket/a/b/c';
Spark — lire les données OSS :
// Without MetaService (credentials embedded in path)
val data = sc.textFile("oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c")
// With MetaService (simplified path)
val data = sc.textFile("oss://bucket/a/b/c")
Obtention des identifiants STS à partir de services gérés manuellement
MetaService expose une API HTTP à l'adresse http://localhost:10011 sur chaque nœud du cluster. Appelez ces endpoints pour récupérer l'identifiant temporaire STS dont votre application a besoin pour accéder aux ressources Alibaba Cloud sans paire AccessKey.
Exemple — obtenir la région du cluster :
curl http://localhost:10011/cluster-region
Endpoints disponibles :
| Endpoint | Valeur renvoyée |
|---|---|
/cluster-region |
Région où réside le cluster |
/cluster-role-name |
Nom du rôle |
/role-access-key-id |
ID AccessKey de l'identifiant STS |
/role-access-key-secret |
Secret AccessKey de l'identifiant STS |
/role-security-token |
Jeton de sécurité de l'identifiant STS |
/cluster-network-type |
Type de réseau |
Notes d'utilisation
Modifiez ou supprimez le rôle AliyunEmrEcsDefaultRole avec prudence. La suppression ou la mauvaise configuration de ce rôle entraîne des échecs de création de cluster et des échecs de tâches. Pour minimiser les risques de sécurité, appliquez le principe du moindre privilège lors de la configuration des autorisations dans la console RAM.