Tous les produits
Search
Centre de documentation

Terraform:Terraform authentication

Dernière mise à jour :Aug 11, 2026

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 :

  1. 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.

  2. 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.

  3. Fichier de configuration partagé :

    1. 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.

    2. 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).

  4. 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

Configuration statique

(access_key)

Définit directement une paire AccessKey dans le fichier de configuration.

  • Développement et tests.

  • Flux de travail CI/CD.

Variables d'environnement

(ALIBABA_CLOUD_ACCESS_KEY)

Lit les informations AccessKey depuis les variables d'environnement.

  • Développement et tests.

  • Environnements d'exécution autonomes, tels que les instances ECS.

Rôle RAM d'instance pour ECS

(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.

Endossement de rôle

(assume_role)

Endosse un rôle RAM pour obtenir des identifiants temporaires.

  • Gestion des ressources multi-comptes.

  • Flux de travail CI/CD.

Identifiant via URL

(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 :

  • AK

  • STSToken

  • ECSRamRole

  • CloudSSO

  • ChainableRamRoleArn

  • External

  • OAuth

  • Gestion des ressources multi-comptes et multi-régions.

  • Gestion des ressources multi-environnements.

Configuration statique

Définissez les identifiants d'accès directement dans le bloc provider d'un fichier de configuration Terraform.

Paramètres

Paramètre

Description

Valeur d'exemple

access_key

ID de la clé AccessKey.

abcd***

secret_key

Secret de la clé AccessKey.

abcd***

security_token (Facultatif)

Jeton de sécurité d'un identifiant STS temporaire.

abcd***

provider "alicloud" {
  access_key = "<Your AccessKey ID>"
  secret_key = "<Your AccessKey secret>"
  # If you use an STS credential, configure security_token.
  # security_token = "<Your STS token>"
}

Exemple de configuration

Par mesure de sécurité, transmettez les identifiants sous forme de variables plutôt que de les coder en dur. Ne définissez pas de valeurs par défaut :

variable "access_key_id" {
  description = "The AccessKey ID for operating your infrastructure"
}
variable "access_key_secret" {
  description = "The AccessKey Secret for operating your infrastructure"
}
variable "security_token" {
  description = "The Security Token for operating your infrastructure"
}
provider "alicloud" {
  access_key = var.access_key_id
  secret_key = var.access_key_secret
  # If you use an STS credential, configure security_token.
  # security_token = var.security_token
}

Utilisez la commande terraform avec l'option -var pour transmettre les valeurs des variables :

$ terraform plan -var access_key_id="<Your AccessKey ID>" -var access_key_secret="<Your AccessKey secret>" -var security_token="<Your STS token>"

Variables d'environnement

Stockez les identifiants dans des variables d'environnement. Terraform les lit lorsqu'aucune configuration statique n'existe.

Paramètres

Paramètre

Description

Valeur d'exemple

ALICLOUD_ACCESS_KEY

ID de la clé AccessKey.

abcd***

ALICLOUD_SECRET_KEY

Secret de la clé AccessKey.

abcd***

ALICLOUD_SECURITY_TOKEN (Facultatif)

Jeton de sécurité d'un identifiant STS temporaire.

abcd***

Exemple de configuration

Linux/macOS
Remarque

Les variables d'environnement définies avec export ne sont valables que pour la session shell actuelle. Pour une persistance, ajoutez la commande export au fichier .bash_profile ou .zshrc.

# AccessKey ID
$ export ALICLOUD_ACCESS_KEY="<Your AccessKey ID>"
# AccessKey Secret
$ export ALICLOUD_SECRET_KEY="<Your AccessKey secret>"
# If you use an STS credential, configure security_token.
$ export ALICLOUD_SECURITY_TOKEN="<Your STS token>"
Windows
  1. Cliquez avec le bouton droit sur This PC sur votre bureau, puis sélectionnez Properties > Advanced system settings > Environment Variables.

  2. Sous System variables ou User variables, cliquez sur New pour créer les variables d'environnement suivantes : ALICLOUD_ACCESS_KEY, ALICLOUD_SECRET_KEY et ALICLOUD_SECURITY_TOKEN (facultatif).

Après avoir défini les variables d'environnement, déclarez uniquement les informations non liées aux identifiants dans le bloc provider :

provider "alicloud" {
  region = "cn-hangzhou"
}

Vous pouvez également définir la région via la variable d'environnement ALICLOUD_REGION. Si aucune région n'est spécifiée dans le bloc provider ou dans une variable d'environnement, la valeur par défaut est cn-beijing.

Les variables d'environnement offrent une configuration plus pratique et plus sécurisée que les configurations statiques.

Rôle RAM d'instance pour ECS

Lorsque Terraform s'exécute sur une instance ECS, authentifiez-vous à l'aide d'un rôle RAM d'instance. L'instance obtient et actualise automatiquement les identifiants temporaires, ce qui élimine la nécessité de configurer des clés AccessKey. Consultez la rubrique Rôles RAM d'instance.

Paramètres

Nom du paramètre

Description

Exemple de valeur

ecs_role_name

Nom du rôle RAM associé à l'instance ECS.

terraform-ecs-role

Exemple de configuration

  1. Préparez une instance ECS disposant d'un accès au réseau public.

  2. Créez un rôle RAM et associez-le à l'instance ECS.

  3. Dans le bloc provider, définissez le paramètre ecs_role_name avec le nom du rôle RAM :

provider "alicloud" {
  ecs_role_name = "<Name of the RAM role attached to the ECS instance>"
}

Vous pouvez également définir ce paramètre à l'aide de la variable d'environnement ALICLOUD_ECS_ROLE_NAME.

L'authentification par rôle RAM d'instance est recommandée lors de l'exécution de Terraform sur ECS.

Emprunt de rôle OIDC

L'emprunt de rôle OIDC permet d'obtenir des identifiants temporaires en endossant un rôle RAM via une identité OIDC, plutôt qu'une clé AccessKey. Pour plus d'informations, consultez la rubrique Gérer les fournisseurs d'identité OIDC.

Paramètres

Configurez les paramètres suivants dans le bloc assume_role_with_oidc :

Nom du paramètre

Description

Exemple de valeur

oidc_provider_arn (obligatoire)

ARN du fournisseur d'identité OIDC, au format : acs:ram::<Alibaba Cloud account ID>:oidc-provider/<RAM Provider role name>. Ce paramètre peut également être configuré via ALIBABA_CLOUD_OIDC_PROVIDER_ARN.

acs:ram::151192xxxxxx:oidc-provider/ackrole

oidc_token (facultatif)

Jeton OIDC émis par un fournisseur d'identité externe. Définissez soit oidc_token, soit oidc_token_file. Ce paramètre peut également être configuré via ALIBABA_CLOUD_OIDC_TOKEN.

eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.**

oidc_token_file (facultatif)

Chemin absolu du fichier stockant le jeton OIDC. Définissez soit oidc_token, soit oidc_token_file. Ce paramètre peut également être configuré via ALIBABA_CLOUD_OIDC_TOKEN_FILE.

/var/run/secrets/oidc/token

role_arn (obligatoire)

ARN du rôle RAM à endosser, au format acs:ram::<Alibaba Cloud account ID>:role/<RAM role name>. Ce paramètre peut également être configuré via ALIBABA_CLOUD_ROLE_ARN.

acs:ram::151192xxxxxx:role/k8srole

policy (facultatif)

Politique d'accès RAM. Si elle est définie, les autorisations effectives correspondent à l'intersection entre cette politique et celles associées à role_arn. Si elle n'est pas définie, les autorisations du rôle role_arn s'appliquent.

{"Version":"1","Statement":[{"Effect":"Allow","Action":"oss:ListBuckets","Resource":"acs:oss:oss-cn-hangzhou::"}]}

role_session_name (facultatif)

Nom personnalisé de la session de rôle, généralement défini comme l'identité de l'appelant. Valeur par défaut : terraform. Peut être défini via ALIBABA_CLOUD_ROLE_SESSION_NAME.

username

session_expiration (facultatif)

Durée de validité en secondes. Plage : de 900 à la valeur MaxSessionDuration du rôle (par défaut : 3600). Vous pouvez augmenter cette durée jusqu'à 43 200 secondes en mettant à jour les informations du rôle.

900

Exemple de configuration

Cette méthode appelle l'API AssumeRoleWithOIDC - Obtenir un identifiant temporaire pour un rôle RAM d'un fournisseur d'identité OIDC pour une connexion SSO basée sur les rôles. Avant de procéder à la configuration, préparez les éléments suivants :

  1. Créez un fournisseur d'identité OIDC, obtenez un jeton OIDC auprès du fournisseur d'identité externe, puis notez l'ARN du fournisseur d'identité OIDC ainsi que le jeton OIDC.

  2. Créez un rôle RAM dont l'entité de confiance est un fournisseur d'identité, accordez-lui les autorisations requises (telles que AliyunOSSFullAccess), puis notez l'ARN du rôle.

  3. (Facultatif) Rédigez une politique RAM personnalisée pour un contrôle d'accès granulaire. Cette politique s'intersecte avec les autorisations associées au rôle.

Ajoutez les éléments suivants au bloc provider :

provider "alicloud" {
  assume_role_with_oidc {
    oidc_provider_arn  = "<ARN of the OIDC IdP>"
    oidc_token         = "<OIDC token issued by the external IdP>"
    role_arn           = "<ARN of the RAM role>"
    policy             = "<Content of the RAM access policy>"
    role_session_name  = "<Custom role session name>"
    session_expiration = <Maximum validity period of the temporary access credential>
  }
}

ACK prend en charge RRSA (RAM Roles for Service Accounts) pour créer automatiquement des fournisseurs d'identité OIDC et émettre des jetons. Pour plus d'informations, consultez la rubrique Utiliser RRSA pour autoriser différents pods à accéder à différents services cloud. Après avoir activé RRSA, le composant ack-pod-identity-webhook injecte les variables d'environnement ALIBABA_CLOUD_OIDC_PROVIDER_ARN, ALIBABA_CLOUD_OIDC_TOKEN_FILE et ALIBABA_CLOUD_ROLE_ARN dans les pods. Dans un pod ACK, la configuration se simplifie comme suit :

provider "alicloud" {
  region = "cn-hangzhou"
  assume_role_with_oidc {
    policy             = <<EOF
    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListBuckets",
          "Resource": "acs:oss:oss-cn-hangzhou:*:*"
        }
      ]
    }
    EOF
    session_name = "terraform-assume-role-session"
    session_expiration = 1000
  }
}

Sans politique policy personnalisée, accordez les autorisations directement au rôle RAM :

provider "alicloud" {
  region = "cn-hangzhou"
  assume_role_with_oidc {
    session_name = "terraform-assume-role-session"
    session_expiration = 1000
  }
}

Emprunt de rôle

L'emprunt de rôle (AssumeRole) permet la séparation des autorisations et l'accès inter-comptes. Une identité existante (utilisateur RAM ou rôle d'instance ECS) endosse un rôle RAM pour obtenir des identifiants temporaires.

Paramètres

Paramètres pris en charge :

  1. access_key et secret_key : Clés AccessKey de l'utilisateur RAM qui endosse le rôle. L'utilisateur doit disposer de l'autorisation sts:AssumeRole. Ces paramètres peuvent également être définis via des variables d'environnement.

  2. assume_role : Bloc de configuration contenant les paramètres suivants :

Paramètre

Description

Exemple de valeur

role_arn (obligatoire)

ARN du rôle RAM à endosser, au format acs:ram::1234567890123456:role/<RAM role name>.

acs:ram::151192xxxxxx:role/k8srole

policy (facultatif)

Politique d'accès RAM. Si elle est définie, les autorisations effectives correspondent à l'intersection entre cette politique et celles associées à role_arn. Si elle n'est pas définie, les autorisations du rôle role_arn s'appliquent.

{"Version":"1","Statement":[{"Effect":"Allow","Action":"oss:ListBuckets","Resource":"acs:oss:oss-cn-hangzhou::"}]}

session_name (facultatif)

Nom personnalisé de la session de rôle, utilisé pour distinguer les opérateurs dans les journaux d'audit. Valeur par défaut : terraform.

terraform

session_expiration (facultatif)

Durée de validité en secondes. Plage : de 900 à la valeur MaxSessionDuration du rôle (par défaut : 3600). Vous pouvez augmenter cette durée jusqu'à 43 200 secondes en mettant à jour les informations du rôle.

3600

external_Id (facultatif)

ID externe pour le rôle, utilisé pour prévenir le problème du « confused deputy ». Pour plus d'informations, consultez la rubrique Utiliser un ID externe pour prévenir le problème du confused deputy.

ID

Exemple de configuration

Cette méthode appelle l'API AssumeRole - Obtenir un identifiant temporaire pour un rôle RAM. Avant de procéder à la configuration, préparez les éléments suivants :

  1. Créez un utilisateur RAM et attribuez-lui la politique AliyunSTSAssumeRoleAccess (ou une politique personnalisée contenant l'autorisation sts:AssumeRole).

  2. Créez une clé AccessKey pour l'utilisateur RAM.

  3. Créez un rôle RAM dont l'entité de confiance est un compte Alibaba Cloud, accordez-lui les autorisations requises (telles que AliyunOSSFullAccess), puis notez son ARN.

  4. (Facultatif) Rédigez une politique RAM personnalisée pour un contrôle d'accès granulaire.

Configurez le bloc provider :

provider "alicloud" {
  # The AccessKey ID of the RAM user that calls AssumeRole.
  access_key = "<AccessKey ID of the RAM user>"
  # The AccessKey secret of the RAM user that calls AssumeRole.
  secret_key = "<AccessKey secret of the RAM user>"
  assume_role {
    role_arn           = "<ARN of a RAM role>"
    policy             = "<Content of a RAM access policy>"
    session_name       = "<Custom role session name>"
    session_expiration = <Maximum validity period of the temporary access credential>
  }
}

Cet exemple répertorie les compartiments OSS dans la région cn-hangzhou en utilisant l'emprunt de rôle. Les paramètres access_key et secret_key sont définis via des variables d'environnement :

provider "alicloud" {
  # For security, the access_key and secret_key here are set as environment variables.
  region = "cn-hangzhou"
  assume_role {
    role_arn           = "acs:ram::11827xxxxxx:role/tf-assume-role"
    policy             = <<EOF
    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListBuckets",
          "Resource": "acs:oss:oss-cn-hangzhou:*:*"
        }
      ]
    }
    EOF
    session_name       = "terraform-assume-role-session"
    session_expiration = 1000
  }
}
Remarque

Avant d'exécuter cet exemple, assurez-vous que le rôle tf-assume-role dispose de l'autorisation AliyunOSSFullAccess. Sinon, l'accès à OSS échouera.

Sur une instance ECS, utilisez un rôle RAM d'instance au lieu de coder en dur les identifiants. Accordez l'autorisation AliyunSTSAssumeRoleAccess au rôle RAM de l'instance :

provider "alicloud" {
  ecs_role_name = "<Name of the RAM role attached to the ECS instance>"
  region        = "cn-hangzhou"
  assume_role {
    role_arn           = "acs:ram::11827xxxxxx:role/tf-assume-role"
    policy             = <<EOF
    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListBuckets",
          "Resource": "acs:oss:oss-cn-hangzhou:*:*"
        }
      ]
    }
    EOF
    session_name       = "terraform-assume-role-session"
    session_expiration = 1000
  }
}

Identifiant via URL

Récupère les identifiants depuis une URI spécifiée.

Paramètres

Paramètre

Description

Exemple de valeur

credentials_url

URI qui renvoie un identifiant temporaire. Doit retourner le code HTTP 200 avec un contenu d'identifiant valide.

http://credentials.uri/

region

Région et zone par défaut.

Certains services ne prennent pas en charge l'accès interrégional. Définissez ce paramètre sur la région de vos ressources.

cn-hangzhou

Exemple de configuration

provider "alicloud" {
  region = "cn-hangzhou"
  credentials_url= "http://credentials.uri/"
}

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.json

  • Windows : 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_profile pour référencer un autre identifiant dans le fichier config.json et 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.