文档中心>日志服务>操作指南>权限管理>使用临时密钥访问 CLS

使用临时密钥访问 CLS

最近更新时间:2024-09-09 18:25:11

我的收藏
注意:
使用临时密钥授权访问时,请务必根据业务需要,按照最小权限原则进行授权。如果您直接授予所有资源(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 时,通过固定密钥计算签名方式不能有效地控制权限,同时把永久密钥放到客户端代码中有极大的泄露风险。如若通过临时密钥方式,则可以方便、有效地解决权限控制问题。 例如,在申请临时密钥过程中,可以通过参见 子账户授权策略,限制操作和资源,将权限限制在指定的范围内。

获取临时密钥

获取临时密钥,可以直接请求 STS 云 API 的方式获取。

使用临时密钥访问 CLS

以 CLS Java SDK 为例,使用临时密钥访问 CLS 示例如下:
说明:
运行如下示例前,请前往 Github 项目 获取 Java SDK 安装包。
package com.tencentcloudapi.cls;

import com.tencentcloudapi.cls.producer.errors.ProducerException;
import org.junit.Test;

public class AsyncProducerClientTest {

@Test
public 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();
}
}