全部產品
Search
文件中心

Alibaba Cloud SDK:管理訪問憑據

更新時間:Jul 03, 2024

本文為您介紹如何配置訪問憑據,以確保安全有效地使用SDK進行開發。

AccessKey方式

重要

由於主帳號AccessKey有資源完全的許可權,一旦泄露風險巨大。建議您使用RAM使用者的AccessKey,並設定定期輪換,建立RAM使用者AccessKey的方法請參見建立AccessKey

範例程式碼:建立一個使用AccessKey方式認證的用戶端,並將其命名為default,以將其設定為預設用戶端。

<?php

use AlibabaCloud\Client\AlibabaCloud;

AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))->asDefaultClient();
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))->name('default');

STS Token方式

通過Security Token Service(Security Token Service,簡稱STS),申請臨時安全憑證(Temporary Security Credentials,簡稱TSC),建立臨時安全用戶端。

<?php

use AlibabaCloud\Client\AlibabaCloud;

AlibabaCloud::stsClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), getenv('ALIBABA_CLOUD_SECURITY_TOKEN'))->name('sts');

RamRoleArn方式

通過指定RAM角色的ARN(Alibabacloud Resource Name),讓用戶端在發起請求前自動申請維護STS Token,自動轉變為一個有時限性的STS用戶端。您也可以自行申請維護 STS Token,再建立 STS用戶端

範例程式碼:建立一個RamRoleArn方式認證的用戶端,命名ramRoleArnClient

<?php

use AlibabaCloud\Client\AlibabaCloud;

AlibabaCloud::ramRoleArnClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), 'roleArn', 'roleSessionName')
              ->name('ramRoleArnClient');

EcsRamRole方式

通過使用ECS執行個體綁定的RAM角色名稱,調用ECS的中繼資料服務(Metadata Server)擷取STS Token,完成用戶端初始化。

範例程式碼:建立一個EcsRamRole方式認證的用戶端,命名ecsRamRoleClient

<?php

use AlibabaCloud\Client\AlibabaCloud;

AlibabaCloud::ecsRamRoleClient('roleName')->name('ecsRamRoleClient');

Bearer Token方式

目前只有話務中心(CCC)支援此類認證方式的用戶端,請自行申請維護Bearer Token。

範例程式碼:建立一個Bearer Token方式認證的用戶端,命名bearerTokenClient

<?php

use AlibabaCloud\Client\AlibabaCloud;

AlibabaCloud::bearerTokenClient('bearerToken')->name('bearerTokenClient');

預設憑證提供者鏈

預設憑證提供者鏈尋找可用的用戶端,尋找順序如下:

1. 環境憑證

程式首先會在環境變數裡尋找環境憑證,如果定義了ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET環境變數且不為空白,程式將使用他們建立預設用戶端。如果請求指定的用戶端不是預設用戶端,程式會在設定檔中載入和尋找用戶端。

2. 設定檔

如果使用者主目錄存在預設檔案~/.alibabacloud/credentials(Windows 為C:\Users\USER_NAME\.alibabacloud\credentials),程式會自動建立指定類型和名稱的用戶端。預設檔案可以不存在,但解析錯誤會拋出異常。 用戶端名稱不分大小寫,若用戶端同名,後者會覆蓋前者。也可以手動載入指定檔案:AlibabaCloud::load('/data/credentials', 'vfs://AlibabaCloud/credentials', ...);不同的專案、工具之間可以共用這個設定檔,因為超出專案之外,也不會被意外提交到版本控制。Windows上可以使用環境變數引用到主目錄 %UserProfile%。類Unix的系統可以使用環境變數 $HOME 或 ~ (tilde)。 可以通過定義ALIBABA_CLOUD_CREDENTIALS_FILE環境變數修改預設檔案的路徑。

[default]                          # 預設用戶端
enable = true                      # 啟用,沒有該選項預設啟用
type = access_key                  # 認證方式為 access_key
access_key_id = foo                # Key
access_key_secret = bar            # Secret
region_id = cn-hangzhou            # 非必填,地區
debug = true                       # 非必填,Debug模式會在CLI下輸出詳細資料
timeout = 0.2                      # 非必填,逾時時間,>1為單位為秒, <1自動乘1000轉為毫秒
connect_Timeout = 0.03             # 非必填,連線逾時時間,同逾時時間
cert_file = /path/server.pem       # 非必填,認證檔案
cert_password = password           # 非必填,認證密碼,沒有密碼可不填
proxy = tcp://localhost:8125       # 非必填,總代理
proxy_http = tcp://localhost:8125  # 非必填,HTTP代理
proxy_https = tcp://localhost:9124 # 非必填,HTTPS代理
proxy_no = example.com             # 非必填,代理忽略的網域名稱

[client1]                          # 命名為 `client1` 的用戶端
type = ecs_ram_role                # 認證方式為 ecs_ram_role
role_name = EcsRamRoleTest         # Role Name
#..................................# 其他配置忽略同上

[client2]                          # 命名為 `client2` 的用戶端
enable = false                     # 不啟用
type = ram_role_arn                # 認證方式為 ram_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn
role_session_name = session_name
#..................................# 其他配置忽略同上

[client3]                          # 命名為 `client3` 的用戶端
type = rsa_key_pair                # 認證方式為 rsa_key_pair
public_key_id = publicKeyId        # Public Key ID
private_key_file = /your/pk.pem    # Private Key 檔案
#..................................# 其他配置忽略同上

3. 執行個體RAM角色

如果定義了環境變數ALIBABA_CLOUD_ECS_METADATA且不為空白,程式會將該環境變數的值作為角色名稱,請求http://100.100.100.200/latest/meta-data/ram/security-credentials/擷取臨時安全憑證,再建立一個預設用戶端。

自訂憑證提供者鏈

可通過自訂程式鏈代替預設程式鏈的尋找順序,也可以自行編寫閉包傳入提供者。

<?php

use AlibabaCloud\Client\Credentials\Providers\CredentialsProvider;

CredentialsProvider::chain(
        CredentialsProvider::ini(),
        CredentialsProvider::env(),
        CredentialsProvider::instance()
);