Configurez les identifiants d'accès pour Alibaba Cloud SDK V1.0 for PHP afin d'authentifier les appels API de manière sécurisée.
Utiliser une paire d'AccessKey
Une paire d'AccessKey associée à un compte Alibaba Cloud accorde un accès complet à toutes les ressources de ce compte. Afin de limiter l'impact d'une éventuelle fuite d'identifiants, utilisez la paire d'AccessKey d'un utilisateur RAM dont les permissions respectent le principe du moindre privilège (PoLP), et renouvelez cette paire régulièrement. Pour plus d'informations sur la création d'une paire d'AccessKey pour un utilisateur RAM, consultez Créer une paire d'AccessKey.
Créez un client par défaut nommé default à l'aide d'une paire d'AccessKey :
<?php
use AlibabaCloud\Client\AlibabaCloud;
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))->asDefaultClient();
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))->name('default');
Utiliser un jeton STS
Recourez aux identifiants temporaires du Security Token Service (STS) lorsque vous avez besoin d'un accès limité dans le temps et restreint en termes de périmètre. Demandez des identifiants temporaires auprès de STS puis créez un client temporaire :
<?php
use AlibabaCloud\Client\AlibabaCloud;
AlibabaCloud::stsClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), getenv('ALIBABA_CLOUD_SECURITY_TOKEN'))->name('sts');
Utiliser un rôle RAM
Attribuez un rôle RAM à un client pour que celui-ci obtienne et actualise automatiquement les jetons STS avant chaque requête API. Vous disposez ainsi d'un client STS à durée limitée, sans aucune gestion manuelle des jetons. Si vous préférez utiliser directement des jetons STS, demandez-les manuellement et créez un client STS explicitement.
Créez un client nommé ramRoleArnClient en utilisant un rôle RAM :
<?php
use AlibabaCloud\Client\AlibabaCloud;
AlibabaCloud::ramRoleArnClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), 'roleArn', 'roleSessionName')
->name('ramRoleArnClient');
Utiliser le rôle RAM d'une instance ECS
Lorsque le code s'exécute sur une instance Elastic Compute Service (ECS), le client peut récupérer un jeton STS depuis le serveur de métadonnées ECS via le rôle RAM attaché à l'instance. Cette approche évite de stocker des identifiants dans votre code ou votre environnement.
Créez un client nommé ecsRamRoleClient en exploitant le rôle RAM de l'instance ECS :
<?php
use AlibabaCloud\Client\AlibabaCloud;
AlibabaCloud::ecsRamRoleClient('roleName')->name('ecsRamRoleClient');
Utiliser un jeton bearer
Les jetons bearer sont pris en charge exclusivement par Cloud Call Center (CCC). Leur demande et leur gestion doivent être effectuées manuellement.
Créez un client nommé bearerTokenClient à partir d'un jeton bearer :
<?php
use AlibabaCloud\Client\AlibabaCloud;
AlibabaCloud::bearerTokenClient('bearerToken')->name('bearerTokenClient');
Utiliser la chaîne de fournisseurs d'identifiants par défaut
La chaîne de fournisseurs d'identifiants par défaut recherche les identifiants selon l'ordre suivant :
Variables d'environnement
Fichier de configuration
Rôle RAM d'instance (métadonnées ECS)
1. Exploiter les identifiants issus des variables d'environnement
Si ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET possèdent des valeurs non nulles, la chaîne de fournisseurs s'en sert pour créer un client par défaut. Lorsque la requête cible un client autre que celui par défaut, la chaîne passe au fichier de configuration.
2. Recourir au fichier de configuration
Si un fichier d'identifiants est présent dans le répertoire personnel, la chaîne de fournisseurs crée automatiquement des clients en fonction du type et du nom indiqués dans ce fichier.
Chemins d'accès par défaut :
Linux/macOS :
~/.alibabacloud/credentialsWindows :
C:\Users\USER_NAME\.alibabacloud\credentials
Comportements clés :
Les noms de clients ne tiennent pas compte de la casse. En cas de doublon, le dernier défini prévaut.
Une exception est levée si le fichier existe mais ne peut pas être analysé.
Ce fichier doit rester en dehors des projets et ne jamais être publié dans des dépôts publics.
Modifiez le chemin par défaut en définissant la variable d'environnement
ALIBABA_CLOUD_CREDENTIALS_FILE.Chargez manuellement des fichiers spécifiques avec
AlibabaCloud::load('/data/credentials', 'vfs://AlibabaCloud/credentials', ...);
Références au répertoire personnel :
Windows : utilisez la variable d'environnement
%UserProfile%Systèmes de type Unix : utilisez la variable d'environnement
$HOMEou le tilde (~)
L'exemple ci-dessous présente un fichier d'identifiants contenant plusieurs configurations de clients :
[default] # The default client.
enable = true # Enable the client. By default, the client is enabled if this parameter is not specified.
type = access_key # The authentication is based on AccessKey pairs.
access_key_id = foo # Key
access_key_secret = bar # Secret
region_id = cn-hangzhou # Optional. The region ID.
debug = true # Optional. Specifies whether to enable the debug mode. The detailed information is displayed on the CLI in debug mode.
timeout = 0.2 # Optional. The timeout period. If the value is greater than 1, the unit is seconds. If the value is smaller than 1, the value is multiplied by 1,000 and the unit is milliseconds.
connect_Timeout = 0.03 # Optional. The timeout period for connection requests. If the value is greater than 1, the unit is seconds. If the value is smaller than 1, the value is multiplied by 1,000 and the unit is milliseconds.
cert_file = /path/server.pem # Optional. The certificate file.
cert_password = password # Optional. The password of the certificate.
proxy = tcp://localhost:8125 # Optional. The common proxy.
proxy_http = tcp://localhost:8125 # Optional. The HTTP proxy.
proxy_https = tcp://localhost:9124 # Optional. The HTTPS proxy.
proxy_no = example.com # Optional. The domain name that is ignored by the proxy.
[client1] # The client named client1.
type = ecs_ram_role # The authentication is based on EcsRamRole credentials.
role_name = EcsRamRoleTest # Role Name
#..................................# The other parameters are the same as those of the default client.
[client2] # The client named client2.
enable = false # The client is disabled.
type = ram_role_arn # The authentication is based on RamRoleArn credentials.
access_key_id = foo
access_key_secret = bar
role_arn = role_arn
role_session_name = session_name
#..................................# The other parameters are the same as those of the default client.
[client3] # The client named client3.
type = rsa_key_pair # The authentication is based on Rivest-Shamir-Adleman (RSA) key pairs.
public_key_id = publicKeyId # Public Key ID
private_key_file = /your/pk.pem # The private key file.
#..................................# The other parameters are the same as those of the default client.
3. Exploiter un rôle RAM d'instance
Lorsque ALIBABA_CLOUD_ECS_METADATA contient une valeur non nulle, la chaîne de fournisseurs interprète cette valeur comme le nom du rôle RAM et interroge http://100.100.100.200/latest/meta-data/ram/security-credentials/ pour obtenir des identifiants de sécurité temporaires. Ces identifiants servent ensuite à créer un client par défaut.
Chaîne de fournisseurs d'identifiants personnalisée
Construisez une chaîne de fournisseurs personnalisée ou transmettez une closure comme fournisseur d'identifiants :
<?php
use AlibabaCloud\Client\Credentials\Providers\CredentialsProvider;
CredentialsProvider::chain(
CredentialsProvider::ini(),
CredentialsProvider::env(),
CredentialsProvider::instance()
);