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:
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.
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.
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.
Tabloda listelenmeyen kimlik bilgisi türlerini veya parametrelerini kullanmayın.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
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
Yöntem 2: Bir AccessKey kullanma
Credentials aracı, sağladığınız AccessKey'i erişim kimlik bilgisi olarak kullanır.
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
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
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
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.
Güvenlik sertleştirme modunda geçici bir kimlik bilgisi elde etmek için Credentials sürüm 1.2.0 veya daha yenisinin kullanılması gerekir.
ECS örneği meta verileri: Örnek meta verilerini alın.
Bir ECS veya ECI örneğine RAM rolü atayın: Örnek RAM rolleri, API işlemlerini çağırarak örnek RAM rolü kullanma.
<?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ı
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
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ı
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
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.jsonWindows:
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 |
Kimlik bilgisi yapılandırmalarının bir koleksiyonunu içerir.
|
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:
falseolarak ayarlandığında SDK kimlik bilgilerini almak için normal moda geri döner.trueolarak 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.
ECS örneği meta verileri: Örnek meta verileri.
Bir ECS veya ECI örneğine RAM rolü ekleyin: RAM rolü oluşturun, ECI örneğine örnek RAM rolü atayın.
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.
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();

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
RAM'in temel kavramlarına genel bakış için bkz. Temel kavramlar.
AccessKey oluşturmak için bkz. AccessKey oluşturma.
Programlı olarak RAM kullanıcıları, AccessKey'ler ve RAM rolleri oluşturmak; izin ilkelerini tanımlamak ve izin vermek için bkz. RAM SDK'sına genel bakış.
Programlı olarak bir rol üstlenmek için bkz. STS SDK'sına genel bakış.
RAM ve STS API'leri hakkında ayrıntılı bilgi için bkz. API başvurusu.
AccessKey'in güvenliğinin ihlal edilmesi durumunda yapılması gerekenler