注意:
使用临时密钥授权访问时,请务必根据业务需要,按照最小权限原则进行授权。如果您直接授予所有资源(resource:*),或者所有操作(action:*)权限,则存在由于权限范围过大导致的数据安全风险。
您在申请临时密钥时,如果指定了权限范围,那么申请到的临时密钥也只能在权限范围内进行操作。例如您在申请临时密钥时,指定了可以往日志主题 e621fdb8-16f4-41cf-bc73-xxxxxxxxx1 上写日志的权限范围,那么申请到的密钥不能将日志信息写入到 e621fdb8-16f4-41cf-bc73-xxxxxxxxx2,也不能从 e621fdb8-16f4-41cf-bc73-xxxxxxxxx2 中检索日志。
临时密钥
临时密钥(临时访问凭证)是通过 CAM 云 API 提供的接口,获取到权限受限的密钥。
CLS API 可以使用临时密钥计算签名,用于发起 CLS API 请求。
CLS API 请求使用临时密钥计算签名时,需要用到获取临时密钥接口返回信息中的三个字段,如下:
secretId:临时证书密钥 ID
secretKey:临时证书密钥 Key
secretToken:临时证书密钥 Token
使用临时密钥的优势
Web、iOS、Android 使用 CLS 时,通过固定密钥计算签名方式不能有效地控制权限,同时把永久密钥放到客户端代码中有极大的泄露风险。如若通过临时密钥方式,则可以方便、有效地解决权限控制问题。
例如,在申请临时密钥过程中,可以通过参见 子账户授权策略,限制操作和资源,将权限限制在指定的范围内。
获取临时密钥
使用临时密钥访问 CLS
以 CLS Java SDK 为例,使用临时密钥访问 CLS 示例如下:
说明:
package com.tencentcloudapi.cls;import com.tencentcloudapi.cls.producer.errors.ProducerException;import org.junit.Test;public class AsyncProducerClientTest {@Testpublic void testAsyncProducerClient() throws ProducerException, InterruptedException {String endpoint = "ap-guangzhou.cls.tencentcs.com";// API密钥 secretId,必填String secretId = "";// API密钥 secretKey,必填String secretKey = "";// API token,必填String secretToken = "";// 日志主题ID,必填String topicId = "";final AsyncProducerConfig config = new AsyncProducerConfig(endpoint, secretId, secretKey,NetworkUtils.getLocalMachineIP(), secretToken);// 构建一个客户端实例final AsyncProducerClient client = new AsyncProducerClient(config);for (int i = 0; i < 10000; ++i) {List<LogItem> logItems = new ArrayList<>();int ts = (int) (System.currentTimeMillis() / 1000);LogItem logItem = new LogItem(ts);logItem.PushBack(new LogContent("__CONTENT__", "你好,我来自深圳|hello world"));logItem.PushBack(new LogContent("city", "guangzhou"));logItem.PushBack(new LogContent("logNo", Integer.toString(i)));logItem.PushBack(new LogContent("__PKG_LOGID__", (String.valueOf(System.currentTimeMillis()))));logItems.add(logItem);client.putLogs(topicId, logItems, result -> System.out.println(result.toString()));}client.close();}}