Le fournisseur Terraform pour Alibaba Cloud prend en charge plusieurs méthodes d'authentification. Choisissez-en une en fonction de votre environnement d'exécution et de vos exigences de sécurité.
Priorité des méthodes d'authentification
Lorsque vous configurez le fournisseur Alibaba Cloud, sélectionnez une seule méthode d'authentification. Le fournisseur recherche les identifiants selon l'ordre suivant et s'arrête à la première correspondance trouvée :
Configuration statique : le fournisseur lit d'abord les paramètres access_key, secret_key, security_token ou ecs_role_name s'ils sont explicitement spécifiés dans le bloc provider.
Variables d'environnement : si aucune configuration statique n'est détectée, le fournisseur lit les variables d'environnement système, telles que ALICLOUD_ACCESS_KEY et ALICLOUD_SECRET_KEY.
-
Fichier de configuration partagé :
Configuration statique : le fournisseur lit les informations d'authentification du profil spécifié depuis le fichier de configuration partagé local. Ces informations peuvent inclure une paire AccessKey, ram_role_arn, ram_role_name ou sts_token.
Configuration avancée : si le fichier de configuration partagé ne contient pas de configuration statique mais est configuré avec CloudSSO, OAuth, un programme externe ou un rôle RAM chaînable (ChainableRamRoleArn), le fournisseur invoque le plugin correspondant pour obtenir un identifiant temporaire Security Token Service (STS).
Identifiant via URL : si aucune des méthodes ci-dessus ne fournit d'identifiant, le fournisseur tente de récupérer les identifiants depuis l'URL spécifiée par credentials_uri.
Recommandations de sécurité
Pour les environnements de production, privilégiez les méthodes basées sur des identifiants temporaires :
Rôle RAM d'instance pour ECS
Endossement de rôle RAM (AssumeRole)
Endossement de rôle via un fournisseur d'identité OIDC
Avantages en matière de sécurité :
Élimine les AccessKey à longue durée de vie codés en dur, réduisant ainsi le risque de compromission des clés.
Limite la durée des autorisations grâce à l'expiration des identifiants.
Prise en charge de l'autorisation fine
Pour un contrôle d'accès granulaire par application, équipe ou projet, utilisez l'endossement de rôle RAM et l'endossement de rôle via un fournisseur d'identité OIDC. Attachez des rôles et des politiques dédiés à chaque charge de travail Terraform afin d'appliquer le principe du moindre privilège.
Méthodes d'authentification Terraform
Le fournisseur Terraform pour Alibaba Cloud prend en charge les méthodes d'authentification suivantes :
|
Méthode d'authentification |
Instructions |
Cas d'utilisation |
|
(access_key) |
Définit directement une paire AccessKey dans le fichier de configuration. |
|
|
(ALIBABA_CLOUD_ACCESS_KEY) |
Lit les informations AccessKey depuis les variables d'environnement. |
|
|
(ecs_role_name) |
Obtient des identifiants temporaires depuis les métadonnées de l'instance ECS via le rôle RAM attaché. |
Terraform s'exécute sur une instance ECS. |
|
Endossement de rôle OIDC (assume_role_with_oidc) |
Endosse un rôle RAM via un fournisseur d'identité OIDC pour obtenir des identifiants temporaires. |
Terraform s'exécute dans un cluster Kubernetes compatible avec OIDC, tel qu'Alibaba Cloud ACK. |
|
(assume_role) |
Endosse un rôle RAM pour obtenir des identifiants temporaires. |
|
|
(credentials_uri) |
Récupère des identifiants temporaires depuis une URI spécifiée. |
Services d'identifiants personnalisés. |
|
Fichier de configuration partagé (profile) |
Gère plusieurs profils d'identifiants dans un seul fichier de configuration Alibaba Cloud CLI. Méthodes prises en charge :
|
|
Configuration statique
Variables d'environnement
Rôle RAM d'instance pour ECS
Emprunt de rôle OIDC
Emprunt de rôle
Identifiant via URL
Fichier de configuration partagé
Terraform lit les identifiants à partir du fichier config.json de l'interface CLI Alibaba Cloud. Configurez plusieurs types d'identifiants dans un seul fichier et référencez-les par le nom du profile. Configurer les identifiants.
Chemins d'accès par défaut aux fichiers :
Linux/macOS :
~/.aliyun/config.jsonWindows :
C:\Users\USER_NAME\.aliyun\config.json
Exemple de configuration
Utilisez le paramètre profile pour spécifier le nom de l'identifiant dans le bloc provider. Si le fichier ne se trouve pas au chemin par défaut, définissez le paramètre shared_credentials_file :
provider "alicloud" {
region = "cn-hangzhou"
shared_credentials_file = "~/.aliyun/config.json"
profile = "TerraformTest"
}
Exemple de fichier config.json :
{
"current": "<PROFILE_NAME>",
"profiles": [
{
"name": "<PROFILE_NAME>",
"mode": "AK",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
},
{
"name": "<PROFILE_NAME1>",
"mode": "StsToken",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"sts_token": "<SECURITY_TOKEN>"
},
{
"name": "<PROFILE_NAME2>",
"mode": "RamRoleArn",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"ram_role_arn": "<ROLE_ARN>",
"ram_session_name": "<ROLE_SESSION_NAME>",
"expired_seconds": 3600
},
{
"name": "<PROFILE_NAME3>",
"mode": "EcsRamRole",
"ram_role_name": "<RAM_ROLE_ARN>"
},
{
"name": "<PROFILE_NAME4>",
"mode": "External",
"process_command": "<YOUR_COMMAND>",
"region_id": "<REGION_ID>",
"output_format": "json",
"language": "en"
},
{
"name": "<PROFILE_NAME5>",
"mode": "OIDC",
"oidc_provider_arn": "<OIDC_PROVIDER_ARN>",
"oidc_token_file": "<OIDC_TOKEN_FILE>",
"ram_role_arn": "<ROLE_ARN>",
"ram_session_name": "<ROLE_SESSION_NAME>",
"expired_seconds": 3600
},
{
"name": "<PROFILE_NAME6>",
"mode": "ChainableRamRoleArn",
"source_profile": "<PROFILE_NAME>",
"ram_role_arn": "<ROLE_ARN>",
"ram_session_name": "<ROLE_SESSION_NAME>",
"expired_seconds": 3600
},
{
"name": "<PROFILE_NAME7>",
"mode": "CloudSSO",
"cloud_sso_sign_in_url": "https://******/login",
"access_token": "eyJraWQiOiJiYzViMzUwYy******",
"cloud_sso_access_token_expire": 1754316142,
"cloud_sso_access_config": "ac-00s1******",
"cloud_sso_account_id": "151266******"
},
{
"name": "<PROFILE_NAME8>",
"mode": "OAuth",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"sts_token": "<SECURITY_TOKEN>",
"region_id": "<REGION_ID>",
"output_format": "json",
"language": "<zh|en>",
"sts_expiration": "<STS_EXPIRATION>",
"oauth_access_token": "<OAUTH_ACCESS_TOKEN>",
"oauth_refresh_token": "<OAUTH_REFRESH_TOKEN>",
"oauth_access_token_expire": 1754316142,
"oauth_site_type": "<CN|EN>"
}
]
}
Dans le fichier config.json, le paramètre mode spécifie le type d'identifiant :
AK : utilise la clé AccessKey de l'utilisateur comme identifiant.
StsToken : utilise un jeton STS comme identifiant.
RamRoleArn : obtient l'identifiant en utilisant l'ARN d'un rôle RAM.
EcsRamRole : obtient l'identifiant en utilisant le rôle RAM attaché à une instance ECS.
External : obtient un identifiant en exécutant une commande externe.
OIDC : obtient l'identifiant en utilisant un ARN de fournisseur d'identité OIDC et un jeton OIDC.
ChainableRamRoleArn : chaîne de rôles. Utilise le paramètre
source_profilepour référencer un autre identifiant dans le fichierconfig.jsonet obtient un nouvel identifiant par endossement de rôle.OAuth : identifiant obtenu en se connectant à l'interface CLI via OAuth.
CloudSSO : identifiant obtenu par un utilisateur CloudSSO via l'interface CLI Alibaba Cloud.