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

如何為OSS Python SDK配置訪問(wèn)憑證

更新時(shí)間:
重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。

使用Python SDK發(fā)起OSS請(qǐng)求,您需要配置訪問(wèn)憑證。阿里云服務(wù)會(huì)通過(guò)訪問(wèn)憑證驗(yàn)證您的身份信息和訪問(wèn)權(quán)限。您可以根據(jù)使用場(chǎng)景對(duì)認(rèn)證和授權(quán)的要求,選擇不同類型的訪問(wèn)憑證。

前提條件

  • 在配置訪問(wèn)憑證前,您需要安裝OSS Python SDK。詳情請(qǐng)參見(jiàn)安裝

  • 需要注意使用的alibabacloud-credentials版本需大于或等于0.3.5,如果小于此版本會(huì)出現(xiàn)報(bào)錯(cuò)。

初始化憑證提供者

憑證提供者選型

OSS支持多種方式初始化憑證提供者,您可以根據(jù)使用場(chǎng)景對(duì)認(rèn)證和授權(quán)的要求,選擇對(duì)應(yīng)的方式初始化憑證提供者。

憑證提供者初始化方式

適用場(chǎng)景

是否需要提供前置的AKSTS Token

底層實(shí)現(xiàn)基于的憑證

憑證有效期

憑證輪轉(zhuǎn)或刷新方式

方式一:使用AK

部署運(yùn)行在安全、穩(wěn)定且不易受外部攻擊的環(huán)境的應(yīng)用程序,無(wú)需頻繁輪轉(zhuǎn)憑證就可以長(zhǎng)期訪問(wèn)云服務(wù)

AK

長(zhǎng)期

手動(dòng)輪轉(zhuǎn)

方式二:使用自動(dòng)輪轉(zhuǎn)的AK

部署運(yùn)行在面臨AK泄露風(fēng)險(xiǎn)的環(huán)境的應(yīng)用程序,需要頻繁輪轉(zhuǎn)憑證才長(zhǎng)期能訪問(wèn)云服務(wù)

AK

長(zhǎng)期

自動(dòng)輪轉(zhuǎn)

方式三:使用STS Token

部署運(yùn)行在不可信的環(huán)境的應(yīng)用程序,希望能控制訪問(wèn)的有效期、權(quán)限

STS Token

臨時(shí)

手動(dòng)刷新

方式四:使用RAMRoleARN

需要授權(quán)訪問(wèn)云服務(wù),例如跨阿里云賬號(hào)訪問(wèn)云服務(wù)的應(yīng)用程序

STS Token

臨時(shí)

自動(dòng)刷新

方式五:使用ECSRAMRole

部署運(yùn)行在阿里云的ECS實(shí)例、ECI實(shí)例、容器服務(wù)Kubernetes版的Worker節(jié)點(diǎn)中的應(yīng)用程序

STS Token

臨時(shí)

自動(dòng)刷新

方式六:使用OIDCRoleARN

部署運(yùn)行在阿里云的容器服務(wù)Kubernetes版的Worker節(jié)點(diǎn)中的不可信應(yīng)用程序

STS Token

臨時(shí)

自動(dòng)刷新

方式七:使用函數(shù)計(jì)算上下文中的Credentials

部署運(yùn)行在阿里云函數(shù)計(jì)算中的應(yīng)用程序的函數(shù)

STS Token

臨時(shí)

無(wú)需刷新

方式八:使用CredentialsURI

需要通過(guò)外部系統(tǒng)獲取訪問(wèn)憑證的應(yīng)用程序

STS Token

臨時(shí)

自動(dòng)刷新

方式九:使用自定義訪問(wèn)憑證

如果以上憑證配置方式都不滿足要求時(shí),您可以自定義獲取憑證的方式

自定義

自定義

自定義

自定義

方式一:使用AK

如果您的應(yīng)用程序部署運(yùn)行在安全、穩(wěn)定且不易受外部攻擊的環(huán)境中,需要長(zhǎng)期訪問(wèn)您的OSS,且不能頻繁輪轉(zhuǎn)憑證時(shí),您可以使用阿里云主賬號(hào)或RAM用戶的AK(Access Key ID、Access Key Secret)初始化憑證提供者。需要注意的是,該方式需要您手動(dòng)維護(hù)一個(gè)AK,存在安全性風(fēng)險(xiǎn)和維護(hù)復(fù)雜度增加的風(fēng)險(xiǎn)。如何獲取AK,請(qǐng)參見(jiàn)CreateAccessKey - 創(chuàng)建主賬號(hào)或RAM用戶訪問(wèn)密鑰

環(huán)境變量

警告

阿里云賬號(hào)擁有資源的全部權(quán)限,AK一旦泄露,會(huì)給系統(tǒng)帶來(lái)巨大風(fēng)險(xiǎn),不建議使用。推薦使用最小化授權(quán)的RAM用戶的AK。

  1. 使用AK設(shè)置環(huán)境變量。

    Mac OS X/Linux/Unix

    export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

    Windows

    set OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
  2. 使用環(huán)境變量來(lái)傳遞憑證信息。

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # 使用環(huán)境變量中獲取的RAM用戶訪問(wèn)密鑰配置訪問(wèn)憑證
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # 使用auth進(jìn)行后續(xù)操作...
    

靜態(tài)憑證

您可以在代碼中使用變量來(lái)引用憑證,這些變量在運(yùn)行時(shí)會(huì)被環(huán)境變量、配置文件或其他外部數(shù)據(jù)源中的實(shí)際憑證值填充。

以下操作步驟以配置文件為例。

  1. 創(chuàng)建配置文件config.ini

    [configName]
    alibaba_cloud_access_key_id = <ALIBABA_CLOUD_ACCESS_KEY_ID>
    alibaba_cloud_access_key_secret = <ALIBABA_CLOUD_ACCESS_KEY_SECRET>
  2. 使用配置文件來(lái)傳遞憑證信息。

    # -*- coding: utf-8 -*-
    import oss2
    import configparser
    
    # 讀取配置文件
    config = configparser.ConfigParser()
    # 假設(shè)config.ini位于腳本同級(jí)目錄下
    config.read('config.ini')
    
    # 從配置文件中獲取Access Key IDAccess Key Secret
    access_key_id = config.get('configName', 'alibaba_cloud_access_key_id')
    access_key_secret = config.get('configName', 'alibaba_cloud_access_key_secret')
    
    # 使用獲取的RAM用戶的訪問(wèn)密鑰配置訪問(wèn)憑證
    auth = oss2.AuthV4(access_key_id, access_key_secret)
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式二:使用自動(dòng)輪轉(zhuǎn)的AK

如果您的應(yīng)用程序需要長(zhǎng)期訪問(wèn)您的OSS,但部署運(yùn)行的環(huán)境面臨AK泄露的風(fēng)險(xiǎn),需要頻繁手動(dòng)輪轉(zhuǎn)(輪換)AK,您可以使用ClientKey初始化憑證提供者。該方式底層實(shí)現(xiàn)是AK。使用ClientKey后,密鑰管理服務(wù)(KMS)可以對(duì)托管的RAM用戶AK進(jìn)行全自動(dòng)的定期輪轉(zhuǎn),將靜態(tài)的RAM用戶AK動(dòng)態(tài)化,從而降低AK泄漏的風(fēng)險(xiǎn)。除定期輪轉(zhuǎn)外,KMS還支持立即輪轉(zhuǎn),在AK泄漏情況下快速更換AK。該方式無(wú)需您手動(dòng)維護(hù)一個(gè)AK,從而降低安全性風(fēng)險(xiǎn)和維護(hù)復(fù)雜度增加的風(fēng)險(xiǎn)。如何獲取ClientKey,請(qǐng)參見(jiàn)創(chuàng)建應(yīng)用接入點(diǎn)

  1. 添加憑據(jù)客戶端依賴。

    pip install aliyun-secret-manager-client
  2. 創(chuàng)建配置文件secretsmanager.properties

    # 訪問(wèn)憑據(jù)類型,固定為client_key
    credentials_type=client_key
    
    # 讀取Client Key的解密密碼:支持從環(huán)境變量或者文件讀取,只需設(shè)置一種
    client_key_password_from_env_variable=<your client key private key password environment variable name>
    client_key_password_from_file_path=<your client key private key password file path>
    
    # Client Key的私鑰文件路徑
    client_key_private_key_path=<your client key private key file path>
    
    # 關(guān)聯(lián)的KMS服務(wù)地域
    cache_client_region_id=[{"regionId":"<regionId>"}]
  3. 使用配置文件來(lái)傳遞憑證信息。

    # -*- coding: utf-8 -*-
    import json
    import oss2
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    from alibaba_cloud_secretsmanager_client.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    
    
    class CredentialProviderWrapper(CredentialsProvider):
        def get_credentials(self):
            secret_cache_client = SecretManagerCacheClientBuilder.new_client()
            secret_info = secret_cache_client.get_secret_info("<secretName>")
            secret_value_json = json.loads(secret_info.secret_value)
            return Credentials(secret_value_json["AccessKeyId"], secret_value_json["AccessKeySecret"])
    
    
    credentials_provider = CredentialProviderWrapper()
    
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式三:使用STS Token

如果您的應(yīng)用程序需要臨時(shí)訪問(wèn)OSS,細(xì)化訪問(wèn)控制,實(shí)時(shí)調(diào)整權(quán)限,以提高安全性和靈活性,您可以使用通過(guò)STS服務(wù)獲取的臨時(shí)身份憑證(Access Key ID、Access Key SecretSecurity Token)初始化憑證提供者。需要注意的是,該方式需要您手動(dòng)維護(hù)一個(gè)STS Token,存在安全性風(fēng)險(xiǎn)和維護(hù)復(fù)雜度增加的風(fēng)險(xiǎn)。如何獲取STS Token,請(qǐng)參見(jiàn)AssumeRole - 獲取扮演角色的臨時(shí)身份憑證

  1. 使用臨時(shí)身份憑證設(shè)置環(huán)境變量。

    Mac OS X/Linux/Unix

    export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>

    Windows

    set OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>
  2. 通過(guò)環(huán)境變量來(lái)傳遞憑證信息。

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # 使用環(huán)境變量中獲取的STS Token配置訪問(wèn)憑證
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式四:使用RAMRoleARN

如果您的應(yīng)用程序需要跨阿里云賬號(hào)訪問(wèn)OSS,通過(guò)扮演RAM角色的方式進(jìn)行權(quán)限管理,以確保安全性和靈活性,您可以使用RAMRoleARN初始化憑證提供者。該方式底層實(shí)現(xiàn)是STS Token。通過(guò)指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具會(huì)前往STS服務(wù)獲取STS Token,并在會(huì)話到期前自動(dòng)刷新STS Token。此外,您還可以通過(guò)為policy賦值來(lái)限制RAM角色到一個(gè)更小的權(quán)限集合。需要注意的是,該方式需要您提供一個(gè)AK,存在安全性風(fēng)險(xiǎn)和維護(hù)復(fù)雜度增加的風(fēng)險(xiǎn)。如何獲取AK,請(qǐng)參見(jiàn)CreateAccessKey - 為RAM用戶創(chuàng)建訪問(wèn)密鑰。如何獲取RAMRoleARN,請(qǐng)參見(jiàn)CreateRole - 創(chuàng)建角色

  1. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  2. 配置AKRAMRoleARN作為訪問(wèn)憑證。

    # -*- coding: utf-8 -*-
    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    import os
    
    
    class CredentialProviderWrapper(CredentialsProvider):
        def __init__(self, client):
            self.client = client
    
        def get_credentials(self):
            credential = self.client.get_credential()
            access_key_id = credential.access_key_id
            access_key_secret = credential.access_key_secret
            security_token = credential.security_token
            return Credentials(access_key_id, access_key_secret, security_token)
    
    
    config = Config(
        # 從環(huán)境變量中獲取RAM用戶的訪問(wèn)密鑰(AccessKey IDAccessKey Secret)
        access_key_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        type='ram_role_arn',
        # 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置RoleArn
        role_arn='<RoleArn>',
        # 角色會(huì)話名稱,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置RoleSessionName
        role_session_name='<RoleSessionName>',
        # 設(shè)置更小的權(quán)限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy='<Policy>',
        # 設(shè)置角色會(huì)話有效期,非必填
        role_session_expiration=3600
    )
    
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式五:使用ECSRAMRole

如果您的應(yīng)用程序運(yùn)行在ECS實(shí)例、ECI實(shí)例、容器服務(wù)KubernetesWorker節(jié)點(diǎn)中,建議您使用ECSRAMRole初始化憑證提供者。該方式底層實(shí)現(xiàn)是STS Token。ECSRAMRole允許您將一個(gè)角色關(guān)聯(lián)到ECS實(shí)例、ECI實(shí)例或容器服務(wù) Kubernetes 版Worker節(jié)點(diǎn),實(shí)現(xiàn)在實(shí)例內(nèi)部自動(dòng)刷新STS Token。該方式無(wú)需您提供一個(gè)AKSTS Token,消除了手動(dòng)維護(hù)AKSTS Token的風(fēng)險(xiǎn)。如何獲取ECSRAMRole,請(qǐng)參見(jiàn)CreateRole - 創(chuàng)建角色

  1. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  2. 配置ECSRAMRole作為訪問(wèn)憑證。

    # -*- coding: utf-8 -*-
    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    
    
    class CredentialProviderWrapper(CredentialsProvider):
        def __init__(self, client):
            self.client = client
    
        def get_credentials(self):
            credential = self.client.get_credential()
            access_key_id = credential.access_key_id
            access_key_secret = credential.access_key_secret
            security_token = credential.security_token
            return Credentials(access_key_id, access_key_secret, security_token)
    
    
    config = Config(
        type='ecs_ram_role',      # 訪問(wèn)憑證類型。固定為ecs_ram_role。
        role_name='<RoleName>'    # 為ECS授予的RAM角色的名稱。可選參數(shù)。如果不設(shè)置,將自動(dòng)檢索。強(qiáng)烈建議設(shè)置,以減少請(qǐng)求。
    )
    
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式六:使用OIDCRoleARN

容器服務(wù)Kubernetes中設(shè)置了Worker節(jié)點(diǎn)RAM角色后,對(duì)應(yīng)節(jié)點(diǎn)內(nèi)的Pod中的應(yīng)用也就可以像ECS上部署的應(yīng)用一樣,通過(guò)元數(shù)據(jù)服務(wù)(Meta Data Server)獲取關(guān)聯(lián)角色的STS Token。但如果容器集群上部署的是不可信的應(yīng)用(比如部署您的客戶提交的應(yīng)用,代碼也沒(méi)有對(duì)您開(kāi)放),您可能并不希望它們能通過(guò)元數(shù)據(jù)服務(wù)獲取Worker節(jié)點(diǎn)關(guān)聯(lián)實(shí)例RAM角色的STS Token。為了避免影響云上資源的安全,同時(shí)又能讓這些不可信的應(yīng)用安全地獲取所需的STS Token,實(shí)現(xiàn)應(yīng)用級(jí)別的權(quán)限最小化,您可以使用RRSA(RAM Roles for Service Account)功能。該方式底層實(shí)現(xiàn)是STS Token。阿里云容器集群會(huì)為不同的應(yīng)用Pod創(chuàng)建和掛載相應(yīng)的服務(wù)賬戶OIDC Token文件,并將相關(guān)配置信息注入到環(huán)境變量中,Credentials工具通過(guò)獲取環(huán)境變量的配置信息,調(diào)用STS服務(wù)的AssumeRoleWithOIDC接口換取綁定角色的STS Token。該方式無(wú)需您提供一個(gè)AKSTS Token,消除了手動(dòng)維護(hù)AKSTS Token的風(fēng)險(xiǎn)。詳情請(qǐng)參見(jiàn)通過(guò)RRSA配置ServiceAccountRAM權(quán)限實(shí)現(xiàn)Pod權(quán)限隔離

  1. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  1. 配置OIDCRoleArn作為訪問(wèn)憑證。

    # -*- coding: utf-8 -*-
    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    import os
    
    
    class CredentialProviderWrapper(CredentialsProvider):
        def __init__(self, client):
            self.client = client
    
        def get_credentials(self):
            credential = self.client.get_credential()
            access_key_id = credential.access_key_id
            access_key_secret = credential.access_key_secret
            security_token = credential.security_token
            return Credentials(access_key_id, access_key_secret, security_token)
    
    
    config = Config(
        # 指定Credential類型,固定值為oidc_role_arn。
        type='oidc_role_arn',
        # RAM角色名稱ARN,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置RoleArn
        role_arn=os.environ.get('<RoleArn>'),
        # OIDC提供商ARN,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_OIDC_PROVIDER_ARN設(shè)置OidcProviderArn
        oidc_provider_arn=os.environ.get('<OidcProviderArn>'),
        # OIDC Token文件路徑,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_OIDC_TOKEN_FILE設(shè)置OidcTokenFilePath
        oidc_token_file_path=os.environ.get('<OidcTokenFilePath>'),
        # 角色會(huì)話名稱,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置RoleSessionName
        role_session_name='<RoleSessionName>',
        # 設(shè)置更小的權(quán)限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy='<Policy>',
        # 設(shè)置session過(guò)期時(shí)間
        role_session_expiration=3600
    )
    
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式七:使用函數(shù)計(jì)算上下文中的Credentials

如果您的應(yīng)用程序的函數(shù)部署運(yùn)行在函數(shù)計(jì)算中,您可以使用函數(shù)計(jì)算上下文中的Credentials初始化憑證提供者。該方式底層實(shí)現(xiàn)是STS Token。函數(shù)計(jì)算根據(jù)函數(shù)配置的角色,通過(guò)扮演服務(wù)角色,而獲取一個(gè)STS Token,然后通過(guò)上下文中的參數(shù)CredentialsSTS Token傳遞給您的應(yīng)用程序。該STS Token的有效期為36小時(shí),且不支持修改。函數(shù)的最大執(zhí)行時(shí)間為24小時(shí),因此,執(zhí)行函數(shù)過(guò)程中,STS Token不會(huì)過(guò)期,您無(wú)需考慮刷新問(wèn)題。該方式無(wú)需您提供一個(gè)AKSTS Token,消除了手動(dòng)維護(hù)AKSTS Token的風(fēng)險(xiǎn)。如何授予函數(shù)計(jì)算訪問(wèn)OSS的權(quán)限,請(qǐng)參見(jiàn)授予函數(shù)計(jì)算訪問(wèn)其他云服務(wù)的權(quán)限

  1. 使用函數(shù)計(jì)算上下文中的Credentials初始化憑證提供者。

    # -*- coding: utf-8 -*-
    import oss2
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    
    
    def handler(event, context):
    
        class CredentialProviderWrapper(CredentialsProvider):
            def get_credentials(self):
                creds = context.credentials
                return Credentials(creds.access_key_id, creds.access_key_secret, creds.security_token)
    
        credentials_provider = CredentialProviderWrapper()
        auth = oss2.ProviderAuthV4(credentials_provider)
        # 使用auth進(jìn)行后續(xù)操作...
    
        return 'success'
    

方式八:使用CredentialsURI

如果您的應(yīng)用程序需要通過(guò)外部系統(tǒng)獲取阿里云憑證,從而實(shí)現(xiàn)靈活的憑證管理和無(wú)密鑰訪問(wèn),您可以使用CredentialsURI初始化憑證提供者。該方式底層實(shí)現(xiàn)是STS Token。Credentials工具通過(guò)您提供的URI獲取STS Token,完成憑證客戶端初始化。該方式無(wú)需您提供一個(gè)AKSTS Token,消除了手動(dòng)維護(hù)AKSTS Token的風(fēng)險(xiǎn)。需要注意的是,提供CredentialsURI響應(yīng)的后端服務(wù)需要實(shí)現(xiàn)STS Token的自動(dòng)刷新邏輯,確保您的應(yīng)用程序始終能獲取到有效憑證。

  1. 為了使Credentials工具正確解析和使用STS Token,URI必須遵循以下響應(yīng)協(xié)議:

    • 響應(yīng)狀態(tài)碼:200

    • 響應(yīng)體結(jié)構(gòu):

      {
          "Code": "Success",
          "AccessKeySecret": "AccessKeySecret",
          "AccessKeyId": "AccessKeyId",
          "Expiration": "2021-09-26T03:46:38Z",
          "SecurityToken": "SecurityToken"
      }
  2. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  3. 配置URI憑證作為訪問(wèn)憑證。

    # -*- coding: utf-8 -*-
    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    
    
    class CredentialProviderWrapper(CredentialsProvider):
        def __init__(self, client):
            self.client = client
    
        def get_credentials(self):
            credential = self.client.get_credential()
            access_key_id = credential.access_key_id
            access_key_secret = credential.access_key_secret
            security_token = credential.security_token
            return Credentials(access_key_id, access_key_secret, security_token)
    
    
    config = Config(
    	type='credentials_uri',
    	# 憑證的 URI,格式為http://local_or_remote_uri/,可以通過(guò)環(huán)境變量ALIBABA_CLOUD_CREDENTIALS_URI設(shè)置CredentialsUri
    	credentials_uri='<CredentialsUri>',
    )
    
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # 使用auth進(jìn)行后續(xù)操作...
    

方式九:使用自定義訪問(wèn)憑證

如果以上憑證配置方式都不滿足要求時(shí),您還可以通過(guò)實(shí)現(xiàn)Credential Providers接口的方式,來(lái)自定義憑證提供方式。需要注意,如果底層實(shí)現(xiàn)是STS Token,需要提供憑證的更新支持。

# -*- coding: utf-8 -*-
import oss2
from oss2 import CredentialsProvider
from oss2.credentials import Credentials


class CredentialProviderWrapper(CredentialsProvider):
    def get_credentials(self):
        # TODO
        # 自定義訪問(wèn)憑證的獲取方法

        # 返回長(zhǎng)期憑證access_key_id, access_key_secrect
        return Credentials('<access_key_id>', '<access_key_secrect>')

        # 返回 臨時(shí)憑證access_key_id, access_key_secrect, token
        # 對(duì)于臨時(shí)憑證,需要根據(jù)過(guò)期時(shí)間,刷新憑證。
        # return Credentials('<access_key_id>', '<access_key_secrect>', '<token>');


credentials_provider = CredentialProviderWrapper()


auth = oss2.ProviderAuthV4(credentials_provider)

# 使用auth進(jìn)行后續(xù)操作...

后續(xù)步驟

配置訪問(wèn)憑證后,您需要初始化OSSClient。詳情請(qǐng)參見(jiàn)初始化