Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud SDK:Erişim kimlik bilgilerini yönetin

Son Güncelleme:Oct 07, 2026

Alibaba Cloud SDK, AccessKey ve STS Token gibi kimlik bilgilerinizi merkezi olarak yönetmek için Credentials aracını kullanır. Bu konuda desteklenen kimlik bilgisi türleri ve bunların yapılandırma yöntemleri açıklanmaktadır.

Arka plan

Kimlik bilgileri, bir sisteme erişilirken kullanıcının kimliğini doğrular. Yaygın türler şunlardır:

  1. AccessKey çifti (AK), bir AccessKey ID ve AccessKey Secret'tan oluşan, Alibaba Cloud hesabı veya RAM kullanıcısı için kalıcı bir kimlik bilgisidir.

  2. STS token'ı, özelleştirilebilir geçerlilik süresi ve izinlere sahip bir Alibaba Cloud RAM rolü için geçici bir güvenlik kimlik bilgisidir. STS nedir.

  3. Bearer token'ı, kimlik doğrulama ve yetkilendirme için kullanılır.

Ön koşullar

  • PHP 5.6 veya sonraki bir sürüm gereklidir. cURL 7.16.2+ ve bir TLS arka ucu içeren cURL uzantısının kullanılması önemle tavsiye edilir.

  • Alibaba Cloud SDK V2.0 gereklidir.

Kimlik bilgilerini yükleyin

Composer'ı genel olarak yükledikten sonra, PHP için Alibaba Cloud Credentials'ı eklemek üzere aşağıdaki komutu çalıştırın:

composer require alibabacloud/credentials
  • Tüm kimlik bilgisi türlerinin desteklendiğinden emin olmak için en son sürümü kullanın.

  • Yayınlanan tüm sürümler CHANGELOG bölümünde listelenmiştir.

Kimlik bilgisi parametreleri

Yapılandırma parametreleri AlibabaCloud\Credentials\Credential\Config içinde tanımlanır. Kimlik bilgisi türünü belirtmek için gerekli type parametresini ayarlayın, ardından ilgili parametreleri yapılandırın. Aşağıdaki tabloda type değerleri ve desteklenen parametreler listelenmiştir; burada √ = zorunlu, - = isteğe bağlı, × = desteklenmiyor anlamına gelir.

Not

Tabloda listelenmeyen kimlik bilgisi türlerini veya parametrelerini kullanmayın.


Parametre


access_key


sts


ram_role_arn


ecs_ram_role


oidc_role_arn


credentials_uri


bearer


accessKeyId: Access Key ID.


√


√


√


×


×


×


×


accessKeySecret: Access Key secret.


√


√


√


×


×


×


×


securityToken: Security Token Service (STS) token'ı.


×


√


-


×


×


×


×


roleArn: RAM rolünün Alibaba Cloud Resource Name (ARN) değeri.


×


×


√


×


√


×


×


roleSessionName: Özel bir oturum adı. Varsayılan değer phpSdkRoleSessionName değeridir.


×


×


-


×


-


×


×


roleName: RAM rolünün adı.


×


×


×


-


×


×


×


disableIMDSv1: Güvenlik sertleştirme modunun zorunlu kılınıp kılınmayacağını belirtir. Varsayılan değer false değeridir.


×


×


×


-


×


×


×


bearerToken: Bearer token'ı.


×


×


×


×


×


×


√


policy: Özel bir ilke.


×


×


-


×


-


×


×


roleSessionExpiration: Saniye cinsinden oturum zaman aşımı süresi. Varsayılan değer 3600'dür.


×


×


-


×


-


×


×


oidcProviderArn: OIDC kimlik sağlayıcısının Alibaba Cloud Resource Name (ARN) değeri.


×


×


×


×


√


×


×


oidcTokenFilePath: OIDC token dosyasının yolu.


×


×


×


×


√


×


×


externalId: karışık yetki sorununu önlemek için kullanılan RAM rolünün harici kimliği.


×


×


-


×


×


×


×


credentialsURI: Kimlik bilgisinin URI'si.


×


×


×


×


×


√


×


STSEndpoint: STS uç noktası. Hem VPC hem de genel uç noktalar desteklenir. Geçerli değerler: Uç noktalar. Varsayılan: sts.aliyuncs.com.


×


×


-


×


-


×


×


timeout: Milisaniye cinsinden HTTP okuma zaman aşımı. Varsayılan değer 5000'dir.


×


×


-


-


-


-


×


connectTimeout: Milisaniye cinsinden HTTP bağlantı zaman aşımı. Varsayılan değer 10000'dir.


×


×


-


-


-


-


×

Bir kimlik bilgisi istemcisini başlatın

Önceki bölümde Credentials aracının desteklediği kimlik bilgisi türleri ve yapılandırma parametreleri açıklanmıştır. Aşağıdaki bölümlerde aracın nasıl kullanılacağına ilişkin kod örnekleri sunulmaktadır. Senaryonuza en uygun yöntemi seçin.

Önemli
  • Bir AccessKey'i düz metin olarak saklamak bir güvenlik riskidir. Bir depo yanlış yapılandırılırsa AccessKey ifşa olabilir ve hesapteki tüm kaynaklar tehlikeye girebilir. AccessKey'leri ortam değişkenlerinde veya yapılandırma dosyalarında saklayın.

  • Credentials aracıyla singleton desenini kullanın. Bu, yerleşik kimlik bilgisi önbelleğini etkinleştirerek sık API çağrılarından kaynaklanan kısıtlamayı önler ve birden fazla örnek oluşturarak kaynak israfını engeller. Oturum kimlik bilgileri için otomatik yenileme mekanizması.

Yöntem 1: Varsayılan kimlik bilgisi sağlayıcı zincirini kullanma

Parametresiz başlatılan bir Credentials istemcisi varsayılan kimlik bilgisi sağlayıcı zincirini kullanır.

<?php

use AlibabaCloud\Credentials\Credential;

// Use the Composer autoloader by requiring the autoload.php file from the vendor directory.
require_once 'vendor/autoload.php';

// No parameters specified.
$credClient = new Credential();

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();

API çağrısı örneği

Bu örnekte ECS'nin DescribeRegions API'sinin nasıl çağrıldığı gösterilmektedir. Başlamadan önce PHP için ECS SDK'sını yükleyin.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Enable Composer autoloading via the vendor/autoload.php file.
require_once 'vendor/autoload.php';

// Initialize the client with the default credential.
$credentialClient = new Credential();
$ecsConfig = new Config([
    // Set the credential for the client configuration.
    'credential' => $credentialClient,
    // Specify the service endpoint.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);
// Initialize the request object.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Initialize runtime options.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Print the HTTP status code.
echo $resp->statusCode;
// Print the response object.
var_dump($resp);

Yöntem 2: Bir AccessKey kullanma

Credentials aracı, sağladığınız AccessKey'i erişim kimlik bilgisi olarak kullanır.

Uyarı

Bir Alibaba Cloud hesabının (kök hesap) tüm kaynakları üzerinde tam izni vardır; bu nedenle ifşa olan bir AK önemli bir güvenlik riski oluşturur. Kök hesabın AK'sini kullanmayın.

En az ayrıcalıklı izinlere sahip bir RAM kullanıcısının AK'sini kullanın.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Enable the Composer autoloader.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'access_key',
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
]);

$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();

API örneği

Bu örnekte DescribeRegions işlemi nasıl çağrıldığı gösterilmektedir ve öncelikle ECS SDK'sını yüklemeniz gerekir.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

// Initialize a credential object with an AccessKey pair.
$credConfig = new CredentialConfig([
    'type' => 'access_key',
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Set the credential for the configuration.
    'credential' => $credClient,
    // Specify the service endpoint.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);
// Initialize the request object.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Initialize runtime configurations.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Print the status code.
echo $resp->statusCode;
// Print the response.
var_dump($resp);

Yöntem 3: Bir STS token'ı kullanma

Credentials aracı, sağladığınız statik STS token'ını erişim kimlik bilgisi olarak kullanır.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Include 'vendor/autoload.php' to enable Composer autoloading.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'sts',
    // Get the AccessKey ID from the environment variable.
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    // Get the AccessKey Secret from the environment variable.
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    // Get the security token from the environment variable.
    'securityToken' => getenv('ALIBABA_CLOUD_SECURITY_TOKEN'),
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

API örneği

Bu örnekte ECS'nin DescribeRegions işlemi çağrılmaktadır. Öncelikle ECS SDK'sını ve STS SDK'sını yükleyin.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\SDK\Sts\V20150401\Models\AssumeRoleRequest;
use AlibabaCloud\SDK\Sts\V20150401\Sts;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

// Create an STS client and call the AssumeRole operation to obtain temporary credentials.
$config = new Config([
    // Retrieve the AccessKey ID and AccessKey Secret from environment variables. Ensure these variables are set before you run the code.
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    'endpoint' => 'sts.aliyuncs.com',
]);
$stsClient = new Sts($config);
$request = new AssumeRoleRequest([
    // The RAM role ARN to assume. Example: acs:ram::123456789012****:role/adminrole. You can set this by using the ALIBABA_CLOUD_ROLE_ARN environment variable.  
    'roleArn' => '<RoleArn>',
    // The role session name. You can set this by using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.  
    'roleSessionName' => '<RoleSessionName>',
]);
$assumeRoleResp = $stsClient->assumeRole($request);
$assumeRoleCredentials = $assumeRoleResp->body->credentials;

// Initialize the Credential client with the retrieved temporary credentials.
$credentialConfig = new CredentialConfig([
    // The credential type.
    'type' => 'sts',
    'accessKeyId' => $assumeRoleCredentials->accessKeyId,
    'accessKeySecret' => $assumeRoleCredentials->accessKeySecret,
    'securityToken' => $assumeRoleCredentials->securityToken,
]);
$credentialClient = new Credential($credentialConfig);
$ecsConfig = new Config([
    // Use the Credential client for authentication.
    'credential' => $credentialClient,
    // The service endpoint for ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);// Initialize the request.
$describeRegionsRequest = new DescribeRegionsRequest([]);// Initialize runtime options.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);// Print the status code.
echo $resp->statusCode;// Print the response.
var_dump($resp);

Yöntem 4: Bir AccessKey ve RAM rolü ARN'si kullanma

Bu yöntem, bir RAM rolü üstlenerek bir STS token'ı elde eder. Oturum izinlerini sınırlamak için bir policy atayabilirsiniz.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Include the Composer autoloader.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'ram_role_arn',
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    // The ARN for the RAM role to assume. Can be set with the ALIBABA_CLOUD_ROLE_ARN environment variable. Example: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // A custom role session name. Can be set with the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
    'roleSessionName' => '<RoleSessionName>',
    // Optional. A policy that further restricts the session's permissions. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Optional. The session expiration in seconds. Default value: 3600.
    'roleSessionExpiration' => 3600,
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

API çağrısı örneği

Bu örnekte ECS DescribeRegions işleminin nasıl çağrıldığı gösterilmektedir. Öncelikle ECS SDK'sını yüklemeniz gerekir.

<?php

namespace AlibabaCloud\SDK\Sample;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Use an AccessKey pair and a RAM role ARN to initialize the Credentials client.
$credentialConfig = new CredentialConfig([
    // The credential type.
    'type' => 'ram_role_arn',
    // Obtain the AccessKey ID from the environment variable.
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    // Obtain the AccessKey secret from the environment variable.
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    // The ARN of the RAM role to assume. You can also set this using the ALIBABA_CLOUD_ROLE_ARN environment variable. Example: acs:ram::123456789012****:role/adminrole
    'roleArn' => '<RoleArn>',
    // A custom role session name. You can also set this using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
    'roleSessionName' => '<RoleSessionName>',
    // Optional. A policy to further restrict the session's permissions. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    'policy' => '<Policy>',
    // Optional. The session expiration, in seconds. Default: 3600.
    'roleSessionExpiration' => 3600,
]);
$credentialClient = new Credential($credentialConfig);

$ecsConfig = new Config([
    // The credential to use for authentication.
    'credential' => $credentialClient,
    // The service endpoint.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);
// Initialize the request object.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Initialize runtime options.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Print the status code.
echo $resp->statusCode;
// Print the response.
var_dump($resp);

Yöntem 5: Bir ECS örneği RAM rolü kullanma

ECS veya ECI örneklerine bir örnek RAM rolü ekleyin. Bu örneklerdeki uygulamalar, bir STS token'ını otomatik olarak almak için Credentials aracını kullanabilir.

Varsayılan olarak Credentials aracı, ECS meta veri hizmetine güvenlik sertleştirme modunda (IMDSv2) erişir ve başarısızlık durumunda normal moda geri döner. Bunu disableIMDSv1 parametresi veya ALIBABA_CLOUD_IMDSV1_DISABLE ortam değişkeni ile kontrol edin:

  • false olarak ayarlanırsa (varsayılan), araç normal moda geri döner.

  • true olarak ayarlanırsa, araç yalnızca güvenlik sertleştirme modunu kullanır ve geri dönmeden başarısızlık durumunda bir özel durum oluşturur.

Sunucunuzun IMDSv2'yi destekleyip desteklemediğini sunucu tarafı yapılandırmalarınız belirler.

ECS meta verilerinden kimlik bilgisi erişimini devre dışı bırakmak için ALIBABA_CLOUD_ECS_METADATA_DISABLED=true ortam değişkenini ayarlayın.

Not
<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'ecs_ram_role',
    // Optional. The name of the ECS RAM role. If not specified, the role name is automatically retrieved. Specifying this parameter reduces requests. You can also set the role name by using the ALIBABA_CLOUD_ECS_METADATA environment variable.
    'roleName' => '<RoleName>',
    // Optional. Defaults to false. When set to true, this enforces security hardening mode. When false, the system first tries to retrieve the credential in security hardening mode and falls back to normal mode (IMDSv1) on failure.
    // 'disableIMDSv1' => true,
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

API çağrısı

Bu örnekte ECS'nin DescribeRegions işleminin nasıl çağrıldığı gösterilmektedir. Bu örneği çalıştırmak için ECS SDK'sını yüklemeniz gerekir.

<?php

namespace AlibabaCloud\SDK\Sample;

// Use Composer's autoload mechanism by requiring the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Initialize the Credentials client with an ECS instance RAM role.
$credConfig = new CredentialConfig([
    'type' => 'ecs_ram_role',
    // Optional. The name of the ECS instance RAM role. If omitted, the role name is retrieved automatically. Specifying this parameter reduces API calls. You can also set the role name using the ALIBABA_CLOUD_ECS_METADATA environment variable.
    'roleName' => '<RoleName>',
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Use the Credential client to configure credentials.
    'credential' => $credClient,
    // The service endpoint.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);
// Initialize the request object.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Initialize the runtime options.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Print the status code.
echo $resp->statusCode;
// Print the response.
var_dump($resp);

Yöntem 6: Bir OIDC rolü ARN'si kullanma

Bir OIDC kimlik sağlayıcısı için RAM rolü oluşturduktan sonra OIDC sağlayıcı ARN'sini, OIDC token'ını ve RAM rolü ARN'sini Credentials aracına iletin. Araç, oturum kimlik bilgileri için otomatik yenileme mekanizması ile bir STS token'ı almak için AssumeRoleWithOIDC işlemini çağırır. Örneğin, RRSA etkinleştirilmiş bir ACK kümesinde araç, OIDC yapılandırmasını Pod ortam değişkenlerinden okur ve hizmet rolü için bir STS token'ı alır.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

// Initialize a credential client to assume a RAM role via an OIDC IdP.
$credConfig = new CredentialConfig([
    // The credential type.
    'type' => 'oidc_role_arn',
    // The OIDC provider ARN. Can also be set via the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable.
    'oidcProviderArn' => '<OidcProviderArn>',
    // The OIDC token file path. Can also be set via the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable.
    'oidcTokenFilePath' => '<OidcTokenFilePath>',
    // The RAM role ARN to assume. Can also be set via the ALIBABA_CLOUD_ROLE_ARN environment variable. Example: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // The custom role session name. Can also be set via the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
    'roleSessionName' => '<RoleSessionName>',
    // Optional. A more restrictive session policy. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Optional. The session expiration, in seconds.
    'roleSessionExpiration' => 3600,
]);

$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

API çağrısı örneği

Bu örnekte ECS'nin DescribeRegions işleminin nasıl çağrıldığı gösterilmektedir. Başlamadan önce PHP için ECS SDK'sını yükleyin.

<?php

namespace AlibabaCloud\SDK\Sample;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Initialize the Credential client to use an OIDC-based RAM role.
$credConfig = new CredentialConfig([
    // The credential type.
    'type' => 'oidc_role_arn',
    // The OIDC provider ARN. You can set this by using the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable.
    'oidcProviderArn' => '<OidcProviderArn>',
    // The OIDC token file path. You can set this by using the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable.
    'oidcTokenFilePath' => '<OidcTokenFilePath>',
    // The RAM role ARN to assume. You can set this by using the ALIBABA_CLOUD_ROLE_ARN environment variable. Example: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // A custom role session name. You can set this by using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
    'roleSessionName' => '<RoleSessionName>',
    // Optional. A more restrictive session policy. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Optional. The session expiration, in seconds.
    'roleSessionExpiration' => 3600,
]);

$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // The authentication credential.
    'credential' => $credClient,
    // The service endpoint.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);
// Initialize the request object.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Initialize runtime configurations.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Print the status code.
echo $resp->statusCode;
// Print the response.
var_dump($resp);

Yöntem 7: Bir URI kimlik bilgisi kullanma

AccessKey'lerin ifşa olmasını önlemek için bir STS hizmetini bir URI arkasına sarın. Credentials aracı, bir STS token'ını URI'den alır ve otomatik olarak yeniler. Oturum tipi kimlik bilgileri için otomatik yenileme.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Enable Composer autoloading by including the vendor/autoload.php file.
require_once 'vendor/autoload.php';

// Use a URI credential to initialize the credential client.
$credConfig = new Config([
    // The credential type.
    'type' => 'credentials_uri',
    // The credential URI, for example, http://local_or_remote_uri/. Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
    'credentialsURI' => '<CredentialsUri>',
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

URI aşağıdaki gereksinimleri karşılamalıdır:

  • GET isteklerini destekler.

  • 200 durum kodu döndürür.

  • Yanıt gövdesi aşağıdaki alanlara sahip bir JSON nesnesidir:

    {
      "AccessKeyId": "AccessKeyId",
      "AccessKeySecret": "AccessKeySecret",
      "Expiration": "2021-09-26T03:46:38Z",
      "SecurityToken": "SecurityToken"
    }

API çağrısı

Bu örneği kullanarak ECS'nin DescribeRegions API'sini çağırmak için öncelikle ECS SDK'sını yüklemeniz gerekir.

<?php

namespace AlibabaCloud\SDK\Sample;

// Include the Composer autoloader.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig; 
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Initialize the Credentials client with a URI credential.
$credConfig = new CredentialConfig([
    // The credential type.
    'type' => 'credentials_uri',
    // The URI of the credential, such as http://local_or_remote_uri/. This can also be set with the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
    'credentialsURI' => '<CredentialsUri>',
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // The credential object for authentication.
    'credential' => $credClient,
    // The service endpoint.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Initialize the ECS client.
$ecsClient = new Ecs($ecsConfig);
// Initialize the request.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Initialize the runtime configuration.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Print the status code.
echo $resp->statusCode;
// Print the response.
var_dump($resp);

Yöntem 8: Bir bearer token'ı kullanma

Şu anda yalnızca Alibaba Cloud Call Center (CCC) bearer token'ı kimlik doğrulamasını destekler.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Load the Composer autoloader.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'bearer',
    // Set your bearer token.
    'bearerToken' => '<BearerToken>',
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getBearerToken();

API örneği

Bu örnekte Cloud Call Center (CCC) için GetInstance işleminin nasıl çağrıldığı gösterilmektedir. Öncelikle CCC SDK'sını yüklemeniz gerekir.

<?php

namespace AlibabaCloud\SDK\Sample;

// Enable autoloading for Composer by using the autoload.php file in the vendor directory.
require_once 'vendor/autoload.php';

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig; 
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\SDK\CCC\V20200701\CCC;
use AlibabaCloud\SDK\CCC\V20200701\Models\GetInstanceRequest;

// Use a bearer token to initialize the credential.
$credConfig = new CredentialConfig([
    // The credential type.
    'type' => 'bearer',
    // Specify the bearer token.
    'bearerToken' => '<BearerToken>',
]);
$credClient = new Credential($credConfig);

$config = new Config([
    // The credential used for authentication.
    'credential' => $credClient,
    // The service endpoint.
    'endpoint' => 'ccc.cn-shanghai.aliyuncs.com'
]);
$cccClient = new CCC($config);
// Initialize the request object.
$getInstanceRequest = new GetInstanceRequest([
    "instanceId" => "ccc-test"
]);
// Initialize runtime configurations.
$runtime = new RuntimeOptions([]);
$resp = $cccClient->getInstanceWithOptions($getInstanceRequest, $runtime);
// Print the status code.
echo $resp->statusCode;
// Print the response.
var_dump($resp);

Varsayılan kimlik bilgisi sağlayıcı zinciri

Varsayılan kimlik bilgisi sağlayıcı zinciri, kimlik bilgisi alımını harici yapılandırma üzerinden kontrol ederek tek bir kod tabanının ortamlar arasında kullanılmasına olanak tanır. $credential = new Credential(); kullanılarak parametresiz başlatıldığında SDK kimlik bilgilerini şu sırayla arar:

1. Ortam değişkenleri

Sistem özelliklerinde kimlik bilgisi bulunamazsa sağlayıcı zinciri ortam değişkenlerini kontrol eder.

  • ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET değişkenlerinin her ikisi de mevcutsa ve boş değilse sağlayıcı zinciri bunları varsayılan kimlik bilgisi olarak kullanır.

  • ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET ve ALIBABA_CLOUD_SECURITY_TOKEN ayrıca ayarlanmışsa sağlayıcı zinciri bir STS token'ını varsayılan kimlik bilgisi olarak kullanır.

2. OIDC IdP için RAM rolü

Kimlik bilgisi bulunamadıysa sağlayıcı zinciri, bir OIDC RAM rolüyle ilgili aşağıdaki ortam değişkenlerini kontrol eder:

  • ALIBABA_CLOUD_ROLE_ARN: RAM rolünün ARN'si.

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC sağlayıcısının ARN'si.

  • ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC token dosyasının yolu.

Her üç ortam değişkeni de mevcutsa ve boş değilse sağlayıcı zinciri, bir STS token'ı almak için Security Token Service (STS) AssumeRoleWithOIDC API'sini çağırmak üzere bu değerleri kullanır.

3. config.json dosyası

Kimlik bilgisi bulunamadıysa sağlayıcı zinciri, paylaşılan kimlik bilgileri dosyası config.json dosyasını varsayılan konumundan yüklemeye çalışır ve dosyada belirtilen kimlik bilgisini kullanır.

  • Linux/macOS: ~/.aliyun/config.json

  • Windows: C:\Users\USER_NAME\.aliyun\config.json

Bir kimlik bilgisini bu şekilde yapılandırmak için Alibaba Cloud CLI aracını kullanabilir veya uygun yolda manuel olarak bir config.json dosyası oluşturabilirsiniz. Aşağıdaki örnek içerik formatını göstermektedir:

{
  "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":"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_NAME5>",
      "mode":"ChainableRamRoleArn",
      "source_profile":"<PROFILE_NAME>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    }
  ]
}

Parametre

Açıklama

current

İlgili kimlik bilgisi yapılandırmasını almak için kimlik bilgisi adını belirtin. Kimlik bilgisi adı, profiles içindeki name parametresinin değeridir. Sistem varsayılan olarak ALIBABA_CLOUD_PROFILE ortam değişkeni tarafından belirtilen kimlik bilgisi adına öncelik verir. Bu ortam değişkeni yapılandırılmamışsa sistem current tarafından belirtilen kimlik bilgisi adını kullanır.

profiles

Kimlik bilgisi yapılandırmalarının bir koleksiyonunu içerir. mode parametresi kimlik bilgisi türünü belirtir:

  • AK: Bir RAM kullanıcısının AccessKey'ini kimlik bilgisi olarak kullanır.

  • StsToken: Bir STS token'ını kimlik bilgisi olarak kullanır.

  • RamRoleArn: Geçici bir kimlik bilgisi elde etmek için bir RAM kullanıcısının kimlik bilgilerini kullanarak bir RAM rolü üstlenir.

  • EcsRamRole: Örnek meta verilerinden bir kimlik bilgisi alır.

  • OIDC: Bir OIDC sağlayıcı ARN'si, bir OIDC token'ı ve bir RAM rolü ARN'si kullanarak bir kimlik bilgisi alır.

  • ChainableRamRoleArn: source_profile parametresi tarafından belirtilen profiles içindeki ilk kimlik bilgisini kullanarak rol zincirleme yoluyla yeni bir kimlik bilgisi alır.

4. ECS örneği RAM rolü

Daha yüksek önceliğe sahip kimlik bilgileri bulunamazsa SDK, geliştirilmiş modda (IMDSv2) meta veri hizmeti üzerinden ECS örneği RAM rolünden kimlik bilgilerini alır. Bu işlem iki istek gerektirir; bunu bire düşürmek için ALIBABA_CLOUD_ECS_METADATA değişkenini rol adına ayarlayın. IMDSv2 başarısızlığında SDK normal moda geri döner. Bu geri dönüşü kontrol etmek için ALIBABA_CLOUD_IMDSV1_DISABLE değişkenini ayarlayın:

  1. false olarak ayarlandığında SDK kimlik bilgilerini almak için normal moda geri döner.

  2. true olarak ayarlandığında yalnızca geliştirilmiş mod kullanılır ve başarısızlık durumunda bir özel durum oluşturulur.

IMDSv2 desteği sunucu yapılandırmanıza bağlıdır.

ECS meta verilerinden kimlik bilgisi erişimini devre dışı bırakmak için ALIBABA_CLOUD_ECS_METADATA_DISABLED ortam değişkenini true olarak ayarlayın.

Not

5. Kimlik bilgisi URI'si

Kimlik bilgisi bulunamadıysa sağlayıcı zinciri ALIBABA_CLOUD_CREDENTIALS_URI ortam değişkenini kontrol eder. Bu değişken ayarlanmışsa ve geçerli bir URI'yi işaret ediyorsa zincir bir STS token'ı almak için URI'ye erişir.

Özel kimlik bilgisi sağlayıcı zinciri

Özel bir kimlik bilgisi sağlayıcı zinciri kullanarak varsayılan arama sırasını geçersiz kılabilirsiniz. Sağlayıcıyı bir kapanış (closure) olarak da iletebilirsiniz.

<?php

use AlibabaCloud\Credentials\Providers\ChainProvider;

ChainProvider::set(
        ChainProvider::ini(),
        ChainProvider::env(),
        ChainProvider::instance()
);

Oturum kimlik bilgileri için otomatik yenileme

Credentials aracı, ram_role_arn, ecs_ram_role, oidc_role_arn ve credentials_uri türleri için oturum kimlik bilgilerini otomatik olarak yeniler. Kimlik bilgileri ilk alım sırasında önbelleğe alınır ve süresi dolduğunda otomatik olarak yenilenir.

Not

ecs_ram_role kimlik bilgileri için Credentials aracı, kimlik bilgisinin süresi dolmadan 15 dakika önce proaktif olarak yeniler.

Bu örnekte, bir kimlik bilgisi istemcisi oluşturmak için singleton deseni kullanılır, farklı aralıklarla kimlik bilgileri alınır ve geçerliliği doğrulamak için bir API çağrısı yapılır.

<?php

namespace Sample;

require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use Darabonba\OpenApi\Models\Config as OpenApiConfig;
use RuntimeException;

class Sample
{
    /**
     * @var Credential|null
     */
    private static $credentialInstance = null;

    /**
     * @return Credential
     * @throws RuntimeException
     */
    private static function getCredentialClient(): Credential
    {
        if (self::$credentialInstance === null) {
            try {
                $config = new CredentialConfig([
                    'type' => 'ram_role_arn',
                    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
                    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
                    'roleArn' => getenv('ALIBABA_CLOUD_ROLE_ARN'),
                    'roleSessionName' => 'RamRoleArnTest',
                    'roleSessionExpiration' => 3600,
                ]);

                self::$credentialInstance = new Credential($config);
            } catch (\Exception $e) {
                throw new RuntimeException("Credential initialization failed: " . $e->getMessage(), 0, $e);
            }
        }

        return self::$credentialInstance;
    }

    /**
     * @var Ecs|null
     */
    private static $ecsClientInstance = null;

    /**
     * @return Ecs
     * @throws RuntimeException
     */
    private static function getEcsClient(): Ecs
    {
        if (self::$ecsClientInstance === null) {
            try {
                $config = new OpenApiConfig([
                    'credential' => self::getCredentialClient(),
                    'endpoint' => 'ecs.cn-hangzhou.aliyuncs.com'
                ]);

                self::$ecsClientInstance = new Ecs($config);
            } catch (\Exception $e) {
                throw new RuntimeException("ECS client initialization failed: " . $e->getMessage(), 0, $e);
            }
        }

        return self::$ecsClientInstance;
    }

    public static function main(): void
    {
        $task = function () {
            // Obtain and print the credential.
            $credentialClient = self::getCredentialClient();
            $credential = $credentialClient->getCredential();

            echo date('c') . PHP_EOL;
            echo "AK ID: {$credential->accessKeyId}" . PHP_EOL;
            echo "AK Secret: {$credential->accessKeySecret}" . PHP_EOL;
            echo "STS Token: {$credential->securityToken}" . PHP_EOL;

            // Call an ECS API operation to test whether the credential is valid.
            $ecsClient = self::getEcsClient();
            $request = new DescribeRegionsRequest();

            try {
                $response = $ecsClient->describeRegions($request);
                echo sprintf("Invoke result: %d" . PHP_EOL, $response->statusCode);
            } catch (\Exception $e) {
                throw new RuntimeException("ECS client execution failed: " . $e->getMessage(), 0, $e);
            }
        };

        call_user_func($task); // Immediately call the operation.

        sleep(600); // Call the operation after 600 seconds.
        call_user_func($task);

        sleep(3600); // Call the operation after 3,600 seconds.
        call_user_func($task);

        sleep(100); // Call the operation after 100 seconds.
        call_user_func($task);
    }
}

// Run the main function.
Sample::main();

image

Günlük çıktısına dayalı analiz:

  • İlk çağrıda önbellek boştur. Sistem yapılandırmanıza göre bir kimlik bilgisi alır ve ardından bunu önbellekte saklar.

  • İkinci çağrı, ilk çağrıyla aynı kimlik bilgisini kullanır; bu, kimlik bilgisinin önbellekten alındığını gösterir.

  • Üçüncü çağrıda önbelleğe alınan kimlik bilgisinin süresi dolmuştur. Zaman aşımı süresi (RoleSessionExpiration) 3.600 saniyedir ancak bu çağrı ilk çağrıdan 4.200 saniye sonra yapılır. Sonuç olarak SDK'nın otomatik yenileme mekanizması yeni bir kimlik bilgisi alır ve önbelleği günceller.

  • Dördüncü çağrı, üçüncü çağrıyla aynı kimlik bilgisini kullanır; bu da önbelleğin güncellendiğini doğrular.

İlgili belgeler