日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

管理訪問憑據

更新時間:
重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

當您通過阿里云SDK調用OpenAPI進行資源操作時,必須正確配置憑證信息。阿里云的Credentials工具提供了一套強大的功能,使您能夠輕松地獲取和管理這些訪問憑證。無論是利用默認憑證,AccessKey(AK),還是安全令牌服務(STS)令牌等,Credentials工具都能為您提供相應支持。此外,本文檔將詳細闡述如何根據優先級使用默認憑證。您將深入理解如何在阿里云SDK中配置和維護憑證,從而確保您對云資源的操作既有效率又具有高度安全性。

背景信息

憑據是指用戶證明其身份的一組信息。用戶在系統中進行登錄時,需要提供正確的憑據才能驗證身份。常見的憑據類型有:

  1. 阿里云主賬號和RAM用戶的永久憑據 AccessKey(簡稱AK)是由AccessKey ID和AccessKey Secret組成的密鑰對。

  2. 阿里云RAM角色的STS臨時訪問Token,簡稱STS Token。它是可以自定義時效和訪問權限的臨時身份憑據,詳情請參見什么是STS

  3. Bearer Token。它是一種身份驗證和授權的令牌類型。

前提條件

  • 使用Credentials工具要求Python版本 >= 3.7。

  • 使用V2.0代系的阿里云SDK。

安裝Credentials工具

使用pip安裝(推薦),如未安裝pip,請先安裝pip。更多信息,請參見pip官網pip user guide

pip install alibabacloud_credentials
  1. 使用最新發布Credentials依賴包,確保所有憑證支持。

  2. 請查看ChangeLog.txt獲取所有已發布的版本列表。

初始化憑據客戶端

Credentials工具支持多種方式初始化憑據客戶端,您可根據實際情況選擇合適的方式進行憑據客戶端初始化。

重要

在項目中使用明文AccessKey,容易因代碼倉庫權限管理不當造成AccessKey泄露,會威脅該賬號下所有資源的安全。建議通過環境變量、配置文件等方式獲取AccessKey。

方式一:使用默認憑據鏈

當您在初始化憑據客戶端不傳入任何參數時,Credentials工具會使用默認憑據鏈方式初始化客戶端。默認憑據的讀取邏輯請參見默認憑據鏈

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_tea_rpc.models import Config

# 不指定參數
credentialsClient = CredClient()
config = Config(credential=credentialsClient)

接口調用方法

通過默認憑據提供鏈自動創建訪問憑證,并在不使用硬編碼AccessKey的情況下成功調用云產品OpenAPI接口。

本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

# Credentials和云產品SDK都需引入Client,此處為創建別名。
from alibabacloud_credentials.client import Client as CredClient
# 引入阿里云ECS SDK,此處以ECS產品為例。
from alibabacloud_ecs20140526.client import Client as EcsClient
# 使用ECS DescribeRegions接口發起調用請求。
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
# 引入阿里云SDK核心包。
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 使用默認憑證初始化Credentials Client。
credentialsClient = CredClient()
ecsConfig = Config(credential=credentialsClient)
# 配置云產品服務接入地址(endpoint)。
ecsConfig.endpoint = 'ecs.aliyuncs.com'
# 使用Credentials Client初始化ECS Client。
ecsClient = EcsClient(ecsConfig)
# 初始化DescribeRegions請求。
request = DescribeRegionsRequest()
# 初始化運行時配置。
runtime_options = RuntimeOptions()
# 調用DescribeRegions接口并獲得響應。
response = ecsClient.describe_regions_with_options(request, runtime_options)
print(response.to_map())

方式二:使用AK

阿里云賬號、RAM用戶可生成調用OpenAPI的密鑰對AK。如何獲取AK請參見文檔創建AccessKey。您可使用AK初始化憑據客戶端。

警告

阿里云主賬號擁有資源的全部權限,AK一旦泄露,會給系統帶來巨大風險,不建議使用。

推薦使用最小化授權的RAM用戶的AK。

import os
from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config

config = Config(
	type='access_key',
	access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
	access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
)
cred = Client(config)

接口調用方法

通過Credentials工具讀取AK,完成云產品OpenAPI接口的調用。

本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

import os
# Credentials和云產品SDK都需引入Client,此處為創建別名。
from alibabacloud_credentials.client import Client as CredClient
# 引入阿里云ECS SDK,此處以ECS產品為例。
from alibabacloud_ecs20140526.client import Client as EcsClient
# 使用ECS DescribeRegions接口發起調用請求。
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
# Credentials和云產品SDK都需引入Config
from alibabacloud_tea_openapi.models import Config
from alibabacloud_credentials.models import Config as CreConfig
from alibabacloud_tea_util.models import RuntimeOptions

# 使用AK 初始化Credentials Client。
credentialsConfig = CreConfig(
    # 憑證類型。
    type='access_key',
    # 設置為AccessKey ID值。
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    # 設置為AccessKey Secret值。
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
)
credentialClient = CredClient(credentialsConfig)

ecsConfig = Config(credential=credentialClient)
# 配置云產品服務接入地址(endpoint)。
ecsConfig.endpoint = 'ecs.aliyuncs.com'
# 初始化ECS Client。
ecsClient = EcsClient(ecsConfig)

# 初始化DescribeRegions請求。
request = DescribeRegionsRequest()
# 初始化運行時配置。
runtime_options = RuntimeOptions()
# 調用DescribeRegions接口并獲得響應。
response = ecsClient.describe_regions_with_options(request, runtime_options)
print(response.to_map())

方式三:使用STS Token

以一個RAM用戶的身份調用STS服務的AssumeRole接口,設置Token的最大過期時間,即可換取到臨時憑據STS Token。以下示例演示如何使用STS Token初始化憑據客戶端(不包含如何獲取到STS Token的過程)。

import os

from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config

config = Config(
    type='sts',
    # 從環境變量中獲取AccessKey ID的值
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    # 從環境變量中獲取AccessKeySecret的值
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    # 從環境變量中獲取臨時SecurityToken的值
    security_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN')
)
credClient = Client(config)

接口調用方法

通過Credentials工具讀取臨時安全令牌(STS Token),完成云產品OpenAPI接口的調用。

本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDKSTS SDK

import os

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CreConfig
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_sts20150401.client import Client as Sts20150401Client
from alibabacloud_sts20150401.models import AssumeRoleRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 從環境變量中獲取RAM用戶ak
config = Config(
    access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = "sts.aliyuncs.com"
stsClient = Sts20150401Client(config)

# 調AssumeRole API的參數
assume_role_request = AssumeRoleRequest(
    # 會話有效時間
    duration_seconds=3600,
    # 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置role_arn
    role_arn='<role_arn>',
    # 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置role_session_name
    role_session_name='<role_session_name>'
)
runtime = RuntimeOptions()
try:
    resp = stsClient.assume_role_with_options(assume_role_request, runtime)
    assumeRoleResponseBodyCredentials = resp.body.credentials

    # 使用STS Token初始化Credentials Client。
    credentialsConfig = CreConfig(
        # 憑證類型。
        type='sts',
        # 設置為AccessKey ID值。
        access_key_id=assumeRoleResponseBodyCredentials.access_key_id,
        # 設置為AccessKey Secret值。
        access_key_secret=assumeRoleResponseBodyCredentials.access_key_secret,
        # 設置為STS Token值。
        security_token=assumeRoleResponseBodyCredentials.security_token
    )
    credentialClient = CredClient(credentialsConfig)
    ecsConfig = Config(credential=credentialClient)
    # 配置云產品服務接入地址(endpoint)。
    ecsConfig.endpoint = 'ecs.aliyuncs.com'
    # 初始化ECS Client。
    ecsClient = EcsClient(ecsConfig)

    # 初始化DescribeRegions請求。
    request = DescribeRegionsRequest()
    # 初始化運行時配置。
    runtime_options = RuntimeOptions()
    # 調用DescribeRegions接口并獲得響應。
    response = ecsClient.describe_regions_with_options(request, runtime_options)
    print(response.to_map())
except Exception as error:
    # 錯誤 message
    print(error.message)

方式四:使用AK及RamRoleArn

該方式底層實現是STS Token。通過指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具可以幫助開發者前往STS換取STS Token。您也可以通過為policy賦值來限制RAM角色到一個更小的權限集合。

import os

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig

credentialsConfig = CredConfig(
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    type='ram_role_arn',
    # 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置role_arn
    role_arn='<role_arn>',
    # 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置role_session_name
    role_session_name='<role_session_name>',
    # 設置更小的權限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy='<policy>',
    role_session_expiration=3600
)
credentialsClient = CredClient(credentialsConfig)

接口調用方法

本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

import os

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.client import Config as CredConfig
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 使用RamRoleArn初始化Credentials Client。
credentialsConfig = CredConfig(
    type='ram_role_arn',  # 憑證類型。
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),  # 從環境變量中獲取AccessKey ID。
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),  # 從環境變量中獲取AccessKey Secret。
    # 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置role_arn
    role_arn='<role_arn>',
    # 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置role_session_name
    role_session_name='<role_session_name>',
    # 設置更小的權限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy='<policy>',
    role_session_expiration=3600  # 會話有效時間
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig = Config(credential=credentialsClient)
# 配置云產品服務接入地址(endpoint)。
ecsConfig.endpoint = 'ecs.aliyuncs.com'
# 使用Credentials Client初始化ECS Client。
ecsClient = EcsClient(ecsConfig)
# 初始化DescribeRegions請求。
request = DescribeRegionsRequest()
# 初始化運行時配置。
runtime_options = RuntimeOptions()
# 調用DescribeRegions接口并獲得響應。
response = ecsClient.describe_regions_with_options(request, runtime_options)
print(response.to_map())

方式五:使用ECS實例RAM角色

該方式底層實現是STS Token。Credentials工具會自動獲取ECS實例綁定的RAM角色,調用ECS的元數據服務(Meta Data Server)換取STS Token,完成憑據客戶端初始化。ECI實例,容器服務 Kubernetes 版的Worker節點均支持綁定實例RAM角色。

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig

credentialsConfig = CredConfig(
	type='ecs_ram_role',
	# 選填,該ECS角色的角色名稱,不填會自動獲取,但是建議加上以減少請求次數,可以通過環境變量ALIBABA_CLOUD_ECS_METADATA設置role_name
	role_name='<role_name>'
)
credentialsClient = CredClient(credentialsConfig)

接口調用方法

本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

# Credentials和云產品SDK都需引入Client,此處為創建別名。
from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.client import Config as CredConfig
# 引入阿里云ECS SDK,此處以ECS產品為例。
from alibabacloud_ecs20140526.client import Client as EcsClient
# 使用ECS DescribeRegions接口發起調用請求。
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
# 引入阿里云SDK核心包。
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 使用EcsRamRole初始化Credentials Client。
credentialsConfig = CredConfig(
    type='ecs_ram_role',  # 憑證類型。
    # 選填,該ECS角色的角色名稱,不填會自動獲取,但是建議加上以減少請求次數,可以通過環境變量ALIBABA_CLOUD_ECS_METADATA設置role_name
    role_name='<role_name>'
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig = Config(credential=credentialsClient)
# 配置云產品服務接入地址(endpoint)。
ecsConfig.endpoint = 'ecs.aliyuncs.com'
# 使用Credentials Client初始化ECS Client。
ecsClient = EcsClient(ecsConfig)

# 初始化DescribeRegions請求。
request = DescribeRegionsRequest()
# 初始化運行時配置。
runtime_options = RuntimeOptions()
# 調用DescribeRegions接口并獲得響應。
response = ecsClient.describe_regions_with_options(request, runtime_options)
print(response.to_map())

方式六:使用OIDCRoleArn

容器服務 Kubernetes 版中設置了Worker節點RAM角色后,對應節點內的Pod中的應用也就可以像ECS上部署的應用一樣,通過元數據服務(Meta Data Server)獲取關聯角色的STS Token。但如果容器集群上部署的是不可信的應用(比如部署您的客戶提交的應用,代碼也沒有對您開放),您可能并不希望它們能通過元數據服務獲取Worker節點關聯實例RAM角色的STS Token。為了避免影響云上資源的安全,同時又能讓這些不可信的應用安全地獲取所需的 STS Token,實現應用級別的權限最小化,您可以使用RRSA(RAM Roles for Service Account)功能。阿里云容器集群會為不同的應用Pod創建和掛載相應的服務賬戶OIDC Token文件,并將相關配置信息注入到環境變量中,Credentials工具通過獲取環境變量的配置信息,調用STS服務的AssumeRoleWithOIDC - OIDC角色SSO時獲取扮演角色的臨時身份憑證接口換取綁定角色的STS Token。詳情請參見通過RRSA配置ServiceAccount的RAM權限實現Pod權限隔離

注入的環境變量如下:

ALIBABA_CLOUD_ROLE_ARN:RAM角色名稱ARN;

ALIBABA_CLOUD_OIDC_PROVIDER_ARN:OIDC提供商ARN;

ALIBABA_CLOUD_OIDC_TOKEN_FILE:OIDC Token文件路徑;

from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config

config = Config(
    type='oidc_role_arn',
    # RAM角色名稱ARN,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置role_arn
    role_arn='<role_arn>',
    # OIDC提供商ARN,可以通過環境變量ALIBABA_CLOUD_OIDC_PROVIDER_ARN設置oidc_provider_arn
    oidc_provider_arn='<oidc_provider_arn>',
    # OIDC Token文件路徑,可以通過環境變量ALIBABA_CLOUD_OIDC_TOKEN_FILE設置oidc_token_file_path
    oidc_token_file_path='<oidc_token_file_path>',
    # 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置role_session_name
    role_session_name='<role_session_name>',
    # 設置更小的權限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy='<policy>',
    # 設置session過期時間
    role_session_expiration=3600
)
cred = Client(config)

access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
security_token = cred.get_security_token()
cred_type = cred.get_type()

接口調用方法

本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.client import Config as CredConfig
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 使用OIDCRoleArn初始化Credentials Client。
credentialsConfig = CredConfig(
    type='oidc_role_arn',
    # RAM角色名稱ARN,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置role_arn
    role_arn='<role_arn>',
    # OIDC提供商ARN,可以通過環境變量ALIBABA_CLOUD_OIDC_PROVIDER_ARN設置oidc_provider_arn
    oidc_provider_arn='<oidc_provider_arn>',
    # OIDC Token文件路徑,可以通過環境變量ALIBABA_CLOUD_OIDC_TOKEN_FILE設置oidc_token_file_path
    oidc_token_file_path='<oidc_token_file_path>',
    # 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置role_session_name
    role_session_name='<role_session_name>',
    # 設置更小的權限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy='<policy>',
    # 設置session過期時間
    role_session_expiration=3600
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig = Config(credential=credentialsClient)
# 配置云產品服務接入地址(endpoint)。
ecsConfig.endpoint = 'ecs.aliyuncs.com'
# 使用Credentials Client初始化ECS Client。
ecsClient = EcsClient(ecsConfig)

# 初始化DescribeRegions請求。
request = DescribeRegionsRequest()
# 初始化運行時配置。
runtime_options = RuntimeOptions()
# 調用DescribeRegions接口并獲得響應。
response = ecsClient.describe_regions_with_options(request, runtime_options)
print(response.to_map())

方式七:使用URI憑據

該方案底層實現是STS Token。Credentials工具通過您提供的URI獲取STS Token,完成憑據客戶端初始化。

from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config

config = Config(
    type='credentials_uri',
    # 憑證的 URI,格式為http://local_or_remote_uri/,可以通過環境變量ALIBABA_CLOUD_CREDENTIALS_URI設置credentials_uri
    credentials_uri='<credentials_uri>',
)
cred = Client(config)

access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
security_token = cred.get_security_token()
cred_type = cred.get_type()

接口調用方法

指定Credentials提供地址,實現通過本地或遠程的URI來獲取并自動更新Token,完成云產品接口的調用。

調用單個云產品的接口需要云產品依賴。本示例以調用云服務器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.client import Config as CredConfig
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 使用URI憑據初始化Credentials Client。
credentialsConfig = CredConfig(
    # 憑證類型。
    type='credentials_uri',
    # 憑證的 URI,格式為http://local_or_remote_uri/,可以通過環境變量ALIBABA_CLOUD_CREDENTIALS_URI設置credentials_uri
    credentials_uri='<credentials_uri>',
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig = Config(credential=credentialsClient)
# 配置云產品服務接入地址(endpoint)。
ecsConfig.endpoint = 'ecs.aliyuncs.com'
# 使用Credentials Client初始化ECS Client。
ecsClient = EcsClient(ecsConfig)

# 初始化DescribeRegions請求。
request = DescribeRegionsRequest()
# 初始化運行時配置。
runtime_options = RuntimeOptions()
# 調用DescribeRegions接口并獲得響應。
response = ecsClient.describe_regions_with_options(request, runtime_options)
print(response.to_map())

方式八:使用Bearer Token

目前只有云呼叫中心CCC這款產品支持Bearer Token的憑據初始化方式。

from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config

config = Config(
	type='bearer',
	# 填入您的Bearer Token
	bearer_token='<BearerToken>',
)
cred = Client(config)

access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
security_token = cred.get_security_token()
cred_type = cred.get_type()

接口調用方法

本示例以調用呼叫中心CCC的GetInstance接口為例,因此需先安裝CCC SDK

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.client import Config as CredConfig
from alibabacloud_ccc20200701.client import Client as CCC20200701Client
from alibabacloud_ccc20200701 import models as ccc20200701_models
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

# 使用Bearer Token初始化Credentials Client。
credentialsConfig = CredConfig(
    type='bearer',  # 憑證類型。
    bearer_token='<bearer_token>',  # 服務器端自動生成的Bearer Token,帶有效期。
)
credentialsClient = CredClient(credentialsConfig)
config = Config(credential=credentialsClient)

# 配置云產品服務接入地址(endpoint)。
config.endpoint = 'ccc.cn-shanghai.aliyuncs.com'
# 使用Credentials Client初始化CCC Client。
cccClient = CCC20200701Client(config)

request = ccc20200701_models.GetInstanceRequest(
    instance_id='ccc-test'
)
# 初始化運行時配置。
runtime_options = RuntimeOptions()
response = cccClient.get_instance_with_options(request, runtime_options)
print(response.to_map())

默認憑據鏈

當您的程序開發環境和生產環境采用不同的憑據類型,常見做法是在代碼中獲取當前環境信息,編寫獲取不同憑據的分支代碼。借助Credentials工具的默認憑據鏈,您可以用同一套代碼,通過程序之外的配置來控制不同環境下的憑據獲取方式。當您在不傳入參數的情況下,直接使用cred = CredClient()初始化憑據客戶端時,阿里云SDK將會嘗試按照如下順序查找相關憑據信息。

1. 使用環境變量

若不存在優先級更高的憑據信息,Credentials工具會優先在環境變量中獲取憑據信息。

  • 如果系統環境變量ALIBABA_CLOUD_ACCESS_KEY_ID(密鑰Key) ALIBABA_CLOUD_ACCESS_KEY_SECRET(密鑰Value) 不為空,Credentials工具會優先使用它們作為默認憑據。

  • 如果系統環境變量ALIBABA_CLOUD_ACCESS_KEY_ID(密鑰Key)、ALIBABA_CLOUD_ACCESS_KEY_SECRET(密鑰Value)、ALIBABA_CLOUD_SECURITY_TOKEN(Token)均不為空,Credentials工具會優先使用STS Token作為默認憑據。

2. 使用OIDC RAM角色

若不存在優先級更高的憑據信息,Credentials工具會在環境變量中獲取如下內容:

ALIBABA_CLOUD_ROLE_ARN:RAM角色名稱ARN;

ALIBABA_CLOUD_OIDC_PROVIDER_ARN:OIDC提供商ARN;

ALIBABA_CLOUD_OIDC_TOKEN_FILE:OIDC Token文件路徑;

若以上三個環境變量都已設置內容,Credentials將會使用變量內容調用STS服務的AssumeRoleWithOIDC - OIDC角色SSO時獲取扮演角色的臨時身份憑證接口換取STS Token作為默認憑據。

3. 使用配置文件

若不存在優先級更高的憑據信息,Credentials工具會優先在如下位置查找文件是否存在。

Linux系統:~/.alibabacloud/credentials.ini

Windows系統: C:\Users\USER_NAME\.alibabacloud\credentials.ini

您也可通過環境變量 ALIBABA_CLOUD_CREDENTIALS_FILE 指定配置文件路徑。如果文件存在,程序將會使用配置文件中default 指定的憑據信息初始化憑據客戶端。當然,您也可以通過環境變量 ALIBABA_CLOUD_PROFILE 來指定憑據信息,例如設置 ALIBABA_CLOUD_PROFILE 的值為client1

配置示例信息如下:

[default]
enable=true
type=access_key
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_ID>
access_key_secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

[client1]
enable=true
type=ecs_ram_role
role_name=<ecs_ram_role_name>

[client2]
enable=true
type=ram_role_arn
policy=<policy>
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_ID>
access_key_secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
role_arn=<ram_role_arn>
role_session_name=<role_session_name>

[client3]
enable=true
type=oidc_role_arn
policy=<policy>
oidc_provider_arn=<ALIBABA_CLOUD_ACCESS_KEY_ID>
oidc_token_file_path=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
role_arn=<ram_role_arn>
role_session_name=<role_session_name>

4. 使用ECS實例RAM角色

若不存在優先級更高的憑據信息,Credentials工具會在環境變量中獲取ALIBABA_CLOUD_ECS_METADATA(ECS實例RAM角色名稱),若存在,程序將會通過ECS的元數據服務(Meta Data Server)獲取ECS實例RAM角色的STS Token作為默認憑據信息。

5. 使用Credentials工具URI

若不存在優先級更高的憑據信息,Credentials工具會在環境變量中獲取ALIBABA_CLOUD_CREDENTIALS_URI,若存在,程序將請求該URI地址,獲取臨時安全憑證作為默認憑據信息。

保護憑據信息最佳實踐

在云上業務中,憑據信息的泄露可能導致系統遭受攻擊。因此,保護憑據信息的安全至關重要。以下是幾種有效的做法,可以避免在代碼中暴露明文憑據信息,從而降低憑據泄露的風險。更多信息,請參見使用訪問憑據訪問阿里云OpenAPI最佳實踐

1. 使用臨時安全憑證(STS token

說明

臨時安全憑證(STS Token):STS token提供了一種具有短期有效性的身份憑證,推薦在處理敏感操作時使用STS Token,而不是長期有效的Access Key。

  • ECS 實例 RAM 角色:如果您的應用部署在ECS(Elastic Compute Service)實例上,可以將RAM角色綁定到該實例。通過ECS實例的元數據服務動態獲取臨時安全憑證(STS Token),從而避免在代碼中硬編碼明文Access Key。更多信息,請參見通過ECS實例RAM角色授權ECS訪問其他云服務

  • 開啟 RRSA 功能:在阿里云容器服務Kubernetes版(ACK)中,啟用RRSA(RAM Roles for Service Account)功能。此功能實現Pod級別的權限隔離,能夠自動向環境變量注入OIDC相關信息。借助Credentials工具,您可以獲取臨時訪問憑據STS Token,以實現更精細的權限控制。更多信息,請參見通過RRSA配置ServiceAccount的RAM權限實現Pod權限隔離

2. 使用默認憑據鏈

當您在初始化憑據客戶端不傳入任何參數時,Credentials工具會使用默認憑據鏈方式初始化客戶端。

3. 使用密鑰管理服務(KMS)托管憑據

密鑰管理服務(Key Management Service)允許用戶安全地存儲和管理數據庫賬號口令、服務器賬號口令、SSH Key、訪問密鑰等敏感信息,通過集成阿里云SDK等方式,業務應用可動態獲取這些憑據信息,從而避免明文存儲帶來的信息泄露或非法操作風險。使用KMS托管RAM憑據時,應用程序僅需配置憑據名稱而非真實AccessKey,進一步提升安全性。此外,KMS支持自動輪轉RAM憑據,有效降低AccessKey泄露風險并確保持續安全。更多信息,請參見管理及使用RAM憑據

4. 風險監測與處理

  • 關注云安全中心發出的安全告警,云安全中心會對已經明確發生的AK泄露,異常API調用,異常登錄等風險發出告警,建議您及時查看并處理外泄的AK事件。更多信息,請參見AK泄露檢測

  • 利用操作審計追蹤,操作審計能夠詳細記錄用戶在阿里云上的所有操作,包括誰在何時進行了什么操作,操作的來源IP及操作結果等信息。利用這些記錄,您可以及時發現異常行為,并采取相應措施。更多信息,請參見通過操作審計查看RAM的操作事件

  • 如發生憑據泄露,更多信息,請參見AccessKey泄露處理方案。通過實施以上最佳實踐,您可以有效減少憑據泄露風險,從而確保云上資源的安全性。

重要
  • 切勿硬編碼Access Key(AK):在業務代碼中硬編碼憑據的做法極易導致泄露,比如被同事、外部攻擊者或在公共代碼倉庫中獵取。

  • 避免使用阿里云主賬號AK:主賬號擁有所有資源的訪問權限,一旦泄露風險巨大,強烈建議避免使用。強烈建議使用具有最小權限的RAM用戶AK。

如何切換憑據

當您想要在程序中使用不同的訪問憑據調用不同OpenAPI時,可以通過如下方式。

使用多個憑據客戶端

通過初始化多個憑據客戶端,傳入到不同的接口請求客戶端。

import os

from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config

config1 = Config(
    type='access_key',
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
)
cred1 = Client(config1)

config2 = Config(
    type='sts',
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    security_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN')
)
cred2 = Client(config2)

使用AuthUtils

當我們初始化憑據客戶端采用配置文件記錄憑據信息時,可以使用auth_util.client_type切換到不同的憑據配置上。示例代碼如下。

from alibabacloud_credentials.utils import auth_util
from alibabacloud_credentials.client import Client

# 若不配置AuthUtils類clientType屬性,則默認使用default。
credentialClient = Client()
# 切換到client1憑據上
auth_util.client_type = "client1"
credentialClient1 = Client()
# 切換到client2憑據上
auth_util.client_type = "client2"
credentialClient2 = Client()

相關文檔