存取控制RAM可以協助您系統管理使用者身份和資源存取權限,使用RAM使用者訪問Tablestore資源比直接使用阿里雲帳號更加安全。本文介紹如何建立RAM使用者和AccessKey、為RAM使用者授權、配置系統內容變數,並通過範例程式碼示範如何使用RAM使用者的AccessKey發起請求。
建立RAM使用者
使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台。
在左側導覽列,選擇
。在使用者頁面,單擊建立使用者。
在建立使用者頁面的使用者帳號資訊地區,設定使用者基本資料。
登入名稱稱:可包含英文字母、數字、半形句號(.)、短劃線(-)和底線(_),最多64個字元。
顯示名稱:最多包含128個字元或漢字。
標籤:單擊,輸入標籤鍵和標籤值。為RAM使用者綁定標籤,便於後續基於標籤系統管理使用者。
說明通過單擊添加使用者,您可以大量建立多個RAM使用者。
在訪問方式地區,選中使用永久AccessKey訪問,單擊確定。
說明如果需要使用RAM使用者登入和訪問阿里雲控制台,請選中控制台訪問。
單擊操作列的複製,儲存RAM使用者資訊。您也可以單獨複製AccessKey ID和AccessKey Secret。
重要RAM使用者的AccessKey Secret只在建立時顯示,頁面關閉後將無法查看,請及時儲存並妥善保管。
為RAM使用者授權
建立RAM使用者後,您需要為RAM使用者授予Tablestore的存取權限。
使用預設策略
以AliyunOTSFullAccess
為例授予RAM使用者訪問Tablestore的許可權。
AliyunOTSFullAccess
擁有Tablestore的完整存取,您也可以選擇以下方式進行授權。
如果需要唯讀許可權,請授予RAM使用者
AliyunOTSReadOnlyAccess
許可權。如果需要唯寫許可權,請授予RAM使用者
AliyunOTSWriteOnlyAccess
許可權。
在左側導覽列,選擇
。在使用者頁面,找到目標RAM使用者。
單擊RAM使用者右側的添加許可權。
在新增授權面板的權限原則地區,搜尋
AliyunOTSFullAccess
並選中。單擊確認新增授權。
使用自訂策略
建立自訂權限原則。
在左側導覽列,選擇
。在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯,並在輸入框中編寫指令碼,單擊確定。
說明以下樣本指令碼授予RAM使用者訪問單個執行個體的許可權,您可以根據需要自訂策略指令碼,例如表和API層級的許可權控制或基於情境(IP、訪問時間限制等)的許可權控制。關於RAM Policy的更多資訊,請參見自訂RAM Policy。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": "acs:ots:*:*:instance/your_instance_name*" } ] }
在建立權限原則對話方塊,填寫策略名稱稱,例如
TestRAMPolicy
,單擊確定。
為RAM使用者授予自訂權限原則。
在左側導覽列,選擇
。在使用者頁面,找到目標RAM使用者。
單擊RAM使用者右側的添加許可權。
在新增授權面板的權限原則地區,搜尋並選中已建立的自訂權限原則。
單擊確認新增授權。
配置環境變數
直接在代碼中儲存訪問憑證容易導致資訊泄露,建議您按以下操作將訪問憑證儲存在系統內容變數中。
Windows
以管理員身份運行命令提示字元,執行以下命令。
setx TABLESTORE_ACCESS_KEY_ID your_access_key_id /m
setx TABLESTORE_ACCESS_KEY_SECRET your_access_key_secret /m
macOS/Linux/Unix
export TABLESTORE_ACCESS_KEY_ID=your_access_key_id
export TABLESTORE_ACCESS_KEY_SECRET=your_access_key_secret
通過RAM使用者發起請求
準備工作
在Table Store控制台建立執行個體和資料表。
擷取執行個體名稱、執行個體訪問地址、地區ID。地區列表請參見地區。
安裝Tablestore SDK。具體操作,請參見安裝Java SDK。
範例程式碼
以下Java範例程式碼用於擷取執行個體下的所有資料表名稱。
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.*;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class Main {
public static void main(String[] args) {
// yourRegion 填寫您的執行個體所在地區,如 cn-hangzhou
final String region = "yourRegion";
// yourInstance 填寫您的執行個體名稱
final String instanceName = "yourInstance";
// yourEndpoint 填寫您的執行個體訪問地址
final String endpoint = "yourEndpoint";
// 擷取系統變數裡的 AccessKey ID 和 AccessKey Secret
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// 構造 V4 簽名
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// 初始化 Tablestore Client
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// 列出執行個體下的資料表列表並列印到控制台
ListTableResponse listTableResponse = client.listTable();
listTableResponse.getTableNames().forEach(System.out::println);
// 關閉 Tablestore Client
client.shutdown();
}
}