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 Belirteci gibi kimlik bilgilerini merkezi olarak yönetmek için Credentials aracını kullanır. Bu konuda desteklenen kimlik türleri ve bunların yapılandırma yöntemleri açıklanmaktadır.

Önkoşullar

Credentials aracını yükleyin

Credentials aracını yüklemek için pip kullanmanızı öneririz:

pip install alibabacloud_credentials

alibabacloud_credentials kitaplığının en son sürümünü kontrol etmek için PyPI'deki alibabacloud-credentials paket sayfasına veya GitHub'daki değişiklik günlüğüne bakın. Tüm özelliklerin desteklendiğinden emin olmak için en son sürümü kullanın.

Kimlik türleri ve parametreler

alibabacloud_credentials.models modülündeki Config sınıfı, Credentials aracının desteklediği kimlik türlerini ve her bir türün yapılandırma parametrelerini tanımlar. type parametresi kimlik türünü belirtir ve her kimlik türü farklı bir yapılandırma parametresi kümesi gerektirir. Aşağıdaki tabloda her sütun type için geçerli bir değere karşılık gelir ve her satır bir yapılandırma parametresine karşılık gelir. Destekleniyor ifadesi zorunlu bir parametreyi, - ifadesi isteğe bağlı bir parametreyi ve Desteklenmiyor ifadesi parametrenin desteklenmediğini gösterir.

Yalnızca aşağıdaki tabloda listelenen kimlik türlerini ve parametreleri kullanmanızı öneririz.

Parametre access_key sts ram_role_arn ecs_ram_role oidc_role_arn credentials_uri bearer
access_key_id: AccessKey ID'si. Destekleniyor Destekleniyor Destekleniyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor
access_key_secret: AccessKey gizli anahtarı. Destekleniyor Destekleniyor Destekleniyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor
security_token: Security Token Service (STS) belirteci. Desteklenmiyor Destekleniyor - Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor
role_arn: Resource Access Management (RAM) rolünün Alibaba Cloud Kaynak Adı (ARN). Desteklenmiyor Desteklenmiyor Destekleniyor Desteklenmiyor Destekleniyor Desteklenmiyor Desteklenmiyor
role_session_name: Özel oturum adı. Varsayılan biçim credentials-python-The current timestamp şeklindedir. Desteklenmiyor Desteklenmiyor - Desteklenmiyor - Desteklenmiyor Desteklenmiyor
role_name: RAM rolünün adı. Desteklenmiyor Desteklenmiyor Desteklenmiyor - Desteklenmiyor Desteklenmiyor Desteklenmiyor
disable_imds_v1: Güvenlik sertleştirme modunun (IMDSv2) zorunlu olarak kullanılıp kullanılmayacağını belirtir. Varsayılan değer: False. Desteklenmiyor Desteklenmiyor Desteklenmiyor - Desteklenmiyor Desteklenmiyor Desteklenmiyor
bearer_token: Bearer belirteci. Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Destekleniyor
policy: Özel ilke. Desteklenmiyor Desteklenmiyor - Desteklenmiyor - Desteklenmiyor Desteklenmiyor
role_session_expiration: Oturum sona erme süresi. Varsayılan değer: 3600. Birim: saniye. Desteklenmiyor Desteklenmiyor - Desteklenmiyor - Desteklenmiyor Desteklenmiyor
oidc_provider_arn: OpenID Connect (OIDC) Kimlik Sağlayıcısının (IdP) ARN'si. Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Destekleniyor Desteklenmiyor Desteklenmiyor
oidc_token_file_path: OIDC belirteç dosyasının yolu. Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Destekleniyor Desteklenmiyor Desteklenmiyor
external_id: Rolün harici kimliği; öncelikli olarak karışık vekil sorununu önlemek için kullanılır. Daha fazla bilgi için bkz. Harici Kimliklerle Karışık Vekil Sorununu Önleme. Desteklenmiyor Desteklenmiyor - Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor
credentials_uri: Kimlik bilgilerinin URI'si. Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Desteklenmiyor Destekleniyor Desteklenmiyor
sts_endpoint: STS uç noktası. VPC uç noktaları ve İnternet uç noktaları desteklenir. Geçerli değerler için bkz. STS uç noktaları. Varsayılan değer: sts.aliyuncs.com. Desteklenmiyor Desteklenmiyor - Desteklenmiyor - Desteklenmiyor Desteklenmiyor
timeout: HTTP isteklerinin okuma zaman aşımı süresi. Varsayılan değer: 5000. Birim: milisaniye. Desteklenmiyor Desteklenmiyor - - - - Desteklenmiyor
connect_timeout: HTTP isteklerinin bağlantı zaman aşımı süresi. Varsayılan değer: 10000. Birim: milisaniye. Desteklenmiyor Desteklenmiyor - - - - Desteklenmiyor

Credentials aracını kullanma

Önceki bölümde Credentials aracının desteklediği kimlik 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. Senaryonuz için en uygun yöntemi seçin.

Önemli
  • Projenizde bir AccessKey'i sabit kodlamak güvenlik riskleri oluşturur. Uygun şekilde yönetilmeyen depo izinleri hesabınızdaki tüm kaynakları açığa çıkarabilir. AccessKey'i ortam değişkenlerinde veya yapılandırma dosyalarında saklamanız önerilir.

  • Credentials aracıyla singleton desenini kullanın. Bu desen, aracın yerleşik kimlik bilgisi önbelleğe alma özelliğini etkinleştirerek sık API çağrılarından kaynaklanan hız sınırlamalarını önler ve birden çok örnek oluşturulmasından kaynaklanan kaynak israfını engeller. Daha fazla bilgi için bkz. Oturum kimlik bilgilerinin otomatik yenilenmesi.

Yöntem 1: Varsayılan kimlik bilgisi zinciri

Not

Bu, OpenAPI Portalındaki örnek kodda kullanılan varsayılan yöntemdir.

Credentials aracını herhangi bir yapılandırma parametresi iletmeden kullanırsanız araç kimlik bilgilerini varsayılan kimlik bilgisi zincirinden alır. Bu yöntemi kullanmadan önce uygulamanızın çalışma zamanı ortamının varsayılan kimlik bilgisi zincirinin desteklediği kimlik bilgisi kaynaklarından biriyle yapılandırıldığından emin olun.

from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
# If no configuration parameter is specified, credentials are retrieved from the default credential chain.
credentialsClient = CredentialClient()
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# Use config to initialize the client of the cloud service. For more information, see the SDK documentation of each cloud service.

Yöntem 2: AccessKey çifti

Credentials aracı, sağladığınız AccessKey bilgisini 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 açıkta kalan bir AK önemli bir güvenlik riski oluşturur. Kök hesabın AK'sini kullanmayın.

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

import os
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='access_key',
    # Required. In this example, the AccessKey ID is retrieved from an environment variable.
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    # Required. In this example, the AccessKey secret is retrieved from an environment variable.
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# Then, use config to initialize the client of the corresponding cloud service.

Yöntem 3: STS belirteci

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

import os
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='sts',
    # Required. In this example, the AccessKey ID is retrieved from an environment variable.
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    # Required. In this example, the AccessKey secret is retrieved from an environment variable.
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    # Required. In this example, the temporary security token is retrieved from an environment variable.
    security_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN')
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# The code that uses config to initialize the client of the cloud service is omitted.

Yöntem 4: AccessKey çifti ve RAM rolü ARN'si

Credentials aracı, sağladığınız AccessKey çiftini ve RAM rolü ARN'sini kullanarak AssumeRole işlemini çağırır ve bir STS belirteci alır. Ardından araç, erişim kimlik bilgisi olarak STS belirtecini kullanır. Bu şekilde elde edilen kimlik bilgileri otomatik yenilemeyi destekler. Daha fazla bilgi için bkz. Oturum kimlik bilgilerinin otomatik yenileme mekanizması.

import os
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='ram_role_arn',
    # Required. In this example, the AccessKey ID is retrieved from an environment variable.
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    # Required. In this example, the AccessKey secret is retrieved from an environment variable.
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    # Required. The ARN of the RAM role to assume. Example: acs:ram::123456789012****:role/adminrole. You can also use the ALIBABA_CLOUD_ROLE_ARN environment variable to set this parameter.
    role_arn='<role_arn>',
    # Optional. The role session name. You can also use the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable to set this parameter.
    role_session_name='<role_session_name>',
    # Optional. A more restrictive policy. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy='<policy>',
    # Optional. The external ID of the role, which is mainly used to prevent the confused deputy problem.
    external_id='<external_id>',
    # Optional. The session expiration time. Default value: 3600 seconds.
    role_session_expiration=3600
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# The code that uses config to initialize the client of the cloud service is omitted.

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

Uygulamanız RAM rolü eklenmiş bir Elastic Compute Service (ECS) veya Elastic Container Instance (ECI) örneğinde çalışıyorsa Credentials aracı, örnek meta verilerinden RAM rolünün STS belirtecini alabilir ve bu belirteci erişim kimlik bilgisi olarak kullanabilir. Bu şekilde elde edilen kimlik bilgileri otomatik yenilemeyi destekler. Daha fazla bilgi için bkz. Oturum kimlik bilgilerinin otomatik yenileme mekanizması.

Varsayılan olarak Credentials aracı, ECS örneği meta verilerine erişmek için güvenlik sertleştirme modunu (IMDSv2) kullanır. Güvenlik sertleştirme modunda bir hata oluşursa hatayı nasıl ele alacağını kontrol etmek için disable_imds_v1 parametresini veya ALIBABA_CLOUD_IMDSV1_DISABLED ortam değişkenini kullanın:

  • Değer varsayılan değer olan False ise Credentials aracı kimlik bilgilerini almaya devam etmek için normal moda (IMDSv1) geçmeyi dener.

  • Değer True ise Credentials aracı kimlik bilgilerini yalnızca güvenlik sertleştirme modunda alır. Güvenlik sertleştirme modunda erişim başarısız olursa bir özel durum oluşturulur. Bir örneğin güvenlik sertleştirme modunu destekleyip desteklemediği örneğin nasıl yapılandırıldığına bağlıdır.

Credentials aracının örnek meta verilerinden kimlik bilgisi almasını engellemek için ALIBABA_CLOUD_ECS_METADATA_DISABLED=true ortam değişkenini de ayarlayabilirsiniz.

from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='ecs_ram_role',
    # Optional. The name of the ECS role. If you leave this parameter empty, the name is obtained automatically. We recommend that you specify the name to reduce the number of requests. You can also use the ALIBABA_CLOUD_ECS_METADATA environment variable to set this parameter.
    role_name='<role_name>',
    # Optional. Default value: False. True: credentials are obtained only in the security hardening mode (IMDSv2), and an exception is thrown if access fails, so set True only for instances that support the security hardening mode. False: the tool first tries to obtain credentials in the security hardening mode. If the attempt fails, the tool switches to the normal mode (IMDSv1).
    disable_imds_v1=True
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# The code that uses config to initialize the client of the cloud service is omitted.

Yöntem 6: OIDC rolü ARN'si

OIDC kimlik doğrulama protokolünü kullanıyorsanız ve bir OIDC kimlik sağlayıcısı için RAM rolü oluşturduysanız, OIDC IdP'nin ARN'sini, OIDC belirtecini ve RAM rolü ARN'sini Credentials aracına iletebilirsiniz. Araç, RAM rolünün STS belirtecini almak için STS'nin AssumeRoleWithOIDC işlemini otomatik olarak çağırır ve STS belirtecini erişim kimlik bilgisi olarak kullanır. Bu şekilde elde edilen kimlik bilgileri otomatik yenilemeyi destekler. Daha fazla bilgi için bkz. Oturum kimlik bilgilerinin otomatik yenileme mekanizması.

Örneğin, uygulamanız RRSA özelliği etkinleştirilmiş bir Container Service for Kubernetes (ACK) kümesinde çalışıyorsa Credentials aracı OIDC yapılandırmasını pod ortam değişkenlerinden okur ve hizmet rolünün STS belirtecini almak için AssumeRoleWithOIDC işlemini çağırır. Uygulamanız ardından Alibaba Cloud hizmetlerine erişmek için STS belirtecini kullanır.

from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='oidc_role_arn',
    # Required. The RAM role ARN. You can also use the ALIBABA_CLOUD_ROLE_ARN environment variable to set this parameter.
    role_arn='<role_arn>',
    # Required. The ARN of the OIDC IdP. You can also use the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable to set this parameter.
    oidc_provider_arn='<oidc_provider_arn>',
    # Required. The path to the OIDC token file. You can also use the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable to set this parameter.
    oidc_token_file_path='<oidc_token_file_path>',
    # Optional. The role session name. You can also use the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable to set this parameter.
    role_session_name='<role_session_name>',
    # Optional. A more restrictive policy. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy='<policy>',
    # Optional. The session expiration time. Default value: 3600 seconds.
    role_session_expiration=3600
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# The code that uses config to initialize the client of the cloud service is omitted.

Yöntem 7: URI kimlik bilgileri

STS hizmetini kapsülleyip bir URI açığa çıkararak harici hizmetlerin bu URI üzerinden bir STS belirteci almasını sağlayabilirsiniz. Bu yaklaşım, AccessKey çifti gibi hassas bilgilerin açığa çıkma riskini azaltır. Credentials aracı, sağladığınız URI'ye erişerek bir STS belirteci alır ve bu belirteci erişim kimlik bilgisi olarak kullanır. Bu şekilde elde edilen kimlik bilgileri otomatik yenilemeyi destekler. Daha fazla bilgi için bkz. Oturum kimlik bilgilerinin otomatik yenileme mekanizması.

URI aşağıdaki koşulları karşılamalıdır:

  • GET istekleri desteklenir.

  • Yanıt durum kodu 200'dür.

  • Yanıt gövdesi aşağıdaki yapıya sahiptir:

{
  "Code": "Success",
  "AccessKeySecret": "yourAccessKeySecret",
  "AccessKeyId": "STS.****************",
  "Expiration": "2021-09-26T03:46:38Z",
  "SecurityToken": "yourSecurityToken"
}

Aşağıdaki örnek, bir URI'den kimlik bilgilerinin nasıl alınacağını göstermektedir:

from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='credentials_uri',
    # Required. The URI from which the credentials are obtained. The format is http://local_or_remote_uri/. You can also use the ALIBABA_CLOUD_CREDENTIALS_URI environment variable to set this parameter.
    credentials_uri='<credentials_uri>',
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use a V2.0 SDK for a cloud service, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# The code that uses config to initialize the client of the cloud service is omitted.

Yöntem 8: Bearer belirteci

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

from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
    type='bearer',
    # Required. Enter your bearer token.
    bearer_token='<BearerToken>',
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# When you use the CCC V2.0 SDK, pass the credential by using the Config class of the alibabacloud_tea_openapi.models module.
config = open_api_models.Config(
    credential=credentialsClient,
    endpoint='<endpoint>'
)
# The code that uses config to initialize the client of the cloud service is omitted.

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

Varsayılan kimlik bilgisi sağlayıcı zinciri, önceden tanımlanmış bir konum dizisini kontrol ederek bir kimlik bilgisi arayan bir geri dönüş mekanizmasıdır. Arama, bir kimlik bilgisi bulunana kadar devam eder. Tüm konumlar kontrol edildikten sonra bile kimlik bilgisi bulunamazsa bir CredentialException oluşturulur. Arama sırası aşağıdaki gibidir:

1. Kimlik bilgisi bilgilerini ortam değişkenlerinden alın

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

  • Hem ALIBABA_CLOUD_ACCESS_KEY_ID hem de ALIBABA_CLOUD_ACCESS_KEY_SECRET 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 da ayarlanmışsa sağlayıcı zinciri bir STS belirtecini varsayılan kimlik bilgisi olarak kullanır.

2. Kimlik bilgisi bilgilerini bir OIDC IdP'nin RAM rolünü kullanarak alın

Henüz bir 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 belirtecinin dosya yolu.

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

3. Kimlik bilgisi bilgilerini bir yapılandırma dosyasından alın

Bu özellik alibabacloud_credentials 1.0rc3 veya sonraki bir sürümü gerektirir.

Henüz bir kimlik bilgisi bulunamadıysa sağlayıcı zinciri, paylaşılan kimlik bilgisi dosyası config.json dosyasını varsayılan konumundan yüklemeyi dener ve dosyada belirtilen kimlik bilgisini kullanır.

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

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

Bu şekilde bir kimlik bilgisi 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 biçimini 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ı, name parametresinin profiles içindeki değeridir. Varsayılan olarak sistem 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 bilgisini kimlik bilgisi olarak kullanır.

  • StsToken: Bir STS belirtecini kimlik bilgisi olarak kullanır.

  • RamRoleArn: Geçici bir kimlik bilgisi almak 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 belirteci ve bir RAM rolü ARN'si kullanarak bir kimlik bilgisi alır.

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

4. Kimlik bilgisi bilgilerini bir ECS örneğinin RAM rolünü kullanarak alın

Henüz bir kimlik bilgisi bulunamadıysa sağlayıcı zinciri, örnek meta verilerinden örnek RAM rolü için bir STS belirteci almayı dener. Bu belirteç daha sonra varsayılan kimlik bilgisi olarak kullanılır. Bunun için zincir önce örneğe atanan RAM rolünün adını alır ve ardından ilgili STS belirtecini almak için bu rolü kullanır. Kimlik bilgisi alma süresini azaltmak ve verimliliği artırmak için RAM rolü adını doğrudan ALIBABA_CLOUD_ECS_METADATA ortam değişkenini kullanarak belirtebilirsiniz.

Varsayılan olarak sağlayıcı zinciri, örnek meta verilerine güvenlik sertleştirilmiş modda (IMDSv2) erişir. Güvenlik sertleştirilmiş modda bir özel durum oluşursa geri dönüş davranışını kontrol etmek için ALIBABA_CLOUD_IMDSV1_DISABLED ortam değişkenini kullanabilirsiniz:

  • Değer false (varsayılan) olduğunda sistem kimlik bilgisini almak için eski moda geçmeyi dener.

  • Değer true olduğunda güvenlik sertleştirilmiş mod zorunlu kılınır. Bu modda erişim başarısız olursa bir özel durum oluşturulur.

Ek olarak, ALIBABA_CLOUD_ECS_METADATA_DISABLED=true ortam değişkenini ayarlayarak sağlayıcı zincirinin kimlik bilgileri için örnek meta verilerine erişmesini engelleyebilirsiniz.

5. Kimlik bilgisi bilgilerini bir URI'ye göre alın

Henüz bir 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 belirteci almak için URI'ye erişir.

Oturum kimlik bilgilerinin otomatik yenileme mekanizması

ram_role_arn, ecs_ram_role, oidc_role_arn ve credentials_uri gibi oturum kimlik bilgisi türleri, kimlik bilgisi sağlayıcısında yerleşik bir mekanizma aracılığıyla otomatik yenilemeyi destekler. Bir kimlik bilgisi istemcisi ilk kez bir kimlik bilgisi aldığında sağlayıcı bunu bir önbellekte saklar. Sonraki işlemlerde aynı istemci örneği kimlik bilgisini bu önbellekten otomatik olarak alır. Önbelleğe alınan kimlik bilgisi süresi dolmuşsa istemci örneği yeni bir kimlik bilgisi alır ve önbelleği buna göre günceller.

Not

ecs_ram_role kimlik bilgileri için kimlik bilgisi sağlayıcı, bunların süresi dolmadan 15 dakika önce proaktif olarak yeniler.

Aşağıdaki örnek, bir kimlik bilgisi istemcisi oluşturmak için singleton desenini kullanır. Farklı zaman aralıklarında bir kimlik bilgisi alarak ve kimlik bilgisinin kullanılabilir olduğunu doğrulamak için bir OpenAPI işlemi çağırarak yenileme mekanizmasını gösterir.

import os
import sys
import time
import threading
from functools import wraps
from threading import Lock
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_ecs20140526.client import Client
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config as EcsConfig
#
# Thread-safe singleton decorator.
#
def singleton(cls):
    """Implements a thread-safe singleton pattern."""
    instances = {}
    lock = Lock()
    @wraps(cls)
    def wrapper(*args, **kwargs):
        with lock:
            if cls not in instances:
                instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return wrapper
#
# Singleton service class.
#
@singleton
class Credential:
    def __init__(self):
        self._client = self._init_client()
    @staticmethod
    def _init_client() -> CredentialClient:
        try:
            config = CredentialConfig(
                type="ram_role_arn",
                access_key_id=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                access_key_secret=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                role_arn=os.getenv("ALIBABA_CLOUD_ROLE_ARN"),
                role_session_name="RamRoleArnTest",
                role_session_expiration=3600,
            )
            return CredentialClient(config)
        except Exception as e:
            raise RuntimeError(f"Credential initialization failed: {e}") from e
    @property
    def client(self) -> CredentialClient:
        return self._client
@singleton
class EcsClient:
    def __init__(self, credential: CredentialClient):
        self._client = self._init_client(credential)
    @staticmethod
    def _init_client(credential: CredentialClient) -> Client:
        try:
            ecs_config = EcsConfig(credential=credential)
            ecs_config.endpoint = 'ecs.cn-hangzhou.aliyuncs.com'
            return Client(ecs_config)
        except Exception as e:
            raise RuntimeError(f"ECS client initialization failed: {e}") from e
    @property
    def client(self) -> Client:
        return self._client
#
# Task function.
#
def execute_task():
    try:
        # Obtain the credential and the ECS client.
        credential = Credential().client.get_credential()
        ecs_client = EcsClient(Credential().client).client
        # Print the credential information.
        print("Time:", time.strftime("%Y-%m-%d %H:%M:%S"))
        print("AK ID:", credential.access_key_id)
        print("AK Secret:", credential.access_key_secret)
        print("STS Token:", credential.security_token)
        # Call an API operation to query the region list.
        request = DescribeRegionsRequest()
        response = ecs_client.describe_regions(request)
        print("Invoke result:", response.to_map()["statusCode"])
    except Exception as e:
        print(f"ECS client execution failed: {e}")
        raise
def schedule_task():
    def run_execute_task():
        try:
            execute_task()
        except Exception as e:
            print(f"Task execution failed: {e}")
        finally:
            nonlocal task_count
            task_count += 1
            if task_count == len(DELAYS):
                print("All tasks completed. Exiting program.")
                sys.exit(0)
    def schedule_execution(delay):
        task_timer = threading.Timer(delay, run_execute_task)
        task_timer.start()
        return task_timer
    # Define the delays of the scheduled tasks.
    DELAYS = [0, 600, 4200, 4300]
    task_count = 0
    timers = [schedule_execution(delay) for delay in DELAYS]
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        print("Program interrupted by user.")
        for timer in timers:
            timer.cancel()
if __name__ == "__main__":
    schedule_task()
Time: 2025-05-28 14:51:51
AK ID: STS.NXC2_xxx_3e8nhx6
AK Secret: 89HQ_xxx_3pVFMsJzbStqUQn
STS Token: CAISxAJ1q6Ft5B2yfSjIr5v2ed2M3uhT3JKAb3b9h3AdS+oUga3T1Dz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
 /QkjJRNF20pLM7VtilmAGIpbng4YfgbiJREKxaXeiru_xxx_3XUiTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
 /DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_+UxM3D2hT+Bi3HLQztRLNaRsQdpz0agA6vG9rqhiMsdPZDiIoh5FHnB/fZ
 +F9ol26SXsmquJdjfFgX9FFPVOqvnsHYRXUS2abqNKD_xxx_1GzLDX26i+hM2jxG6CFc9BJ3S5iElyLCAA
Invoke result: 200
Time: 2025-05-28 15:01:51
AK ID: STS.NXC2_xxx_3e8nhx6
AK Secret: 89HQ_xxx_3pVFMsJzbStqUQn
STS Token: CAISxAJ1q6Ft5B2yfSjIr5v2ed2M3uhT3JKAb3b9h3AdS+oUga3T1Dz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
 /QkjJRNF20pLM7VtilmAGIpbng4YfgbiJREKxaXeiru_xxx_3XUiTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
 /DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_+UxM3D2hT+Bi3HLQztRLNaRsQdpz0agA6vG9rqhiMsdPZDiIoh5FHnB/fZ
 +F9ol26SXsmquJdjfFgX9FFPVOqvnsHYRXUS2abqNKD_xxx_1GzLDX26i+hM2jxG6CFc9BJ3S5iElyLCAA
Invoke result: 200
Time: 2025-05-28 16:01:53
AK ID: STS.NVw9_xxx_QZ3M4mu
AK Secret: 2mP6_xxx_Xvp38ai4mJTazm
STS Token: CAISxAJ1q6Ft5B2yfSjIr5XCctz4vp1A9qmocRChqE4hXdUfovH6Lzz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
 /QkjJRNF20pLM7VtoxWAYIpbng4YfgbiJREKxaXeiru_xxx_iTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
 /DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_xM3D2hT+Bi3HLQztXxScP8Qdpz0agAG61LMbLwCjTNi3juW48l
 +/w3E16v00Wet2c9vr1Ftp3qaJ8zuQJIMgixWIvAXa4_xxx_eAMf+DaoEa0gUg1lQ7096D76vMDDr1eTiiAA
Invoke result: 200
Time: 2025-05-28 16:03:31
AK ID: STS.NVw9_xxx_QZ3M4mu
AK Secret: 2mP6_xxx_Xvp38ai4mJTazm
STS Token: CAISxAJ1q6Ft5B2yfSjIr5XCctz4vp1A9qmocRChqE4hXdUfovH6Lzz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
 /QkjJRNF20pLM7VtoxWAYIpbng4YfgbiJREKxaXeiru_xxx_iTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
 /DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_xM3D2hT+Bi3HLQztXxScP8Qdpz0agAG61LMbLwCjTNi3juW48l
 +/w3E16v00Wet2c9vr1Ftp3qaJ8zuQJIMgixWIvAXa4_xxx_eAMf+DaoEa0gUg1lQ7096D76vMDDr1eTiiAA
Invoke result: 200

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 önbelleğe kaydeder.

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

  • Üçüncü çağrıda önbelleğe alınan kimlik bilgisinin süresi dolmuştur. Sona erme 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