使用临时安全凭证
您可以使用临时安全凭证对API请求进行签名,进而通过编程方式访问对应的华为云资源。临时安全凭证提供的权限与永久访问密钥(例如IAM用户永久AK/SK)相同,但存在如下区别:
- 使用临时安全凭证进行调用时,必须在调用中包含随临时安全凭证一同返回的会话令牌security_token。华为云使用该会话令牌来验证临时安全凭证的有效性。
- 临时安全凭证存在有效期。到期后,任何使用此临时安全凭证签名的调用都将失败,此时您必须生成一组新的临时安全凭证。
- 使用临时安全凭证签名调用时,请求会话可能会包含一组标签,这些标签来自调用AssumeAgency API时传递的会话标签参数。
您可调用STS AssumeAgency API来获取临时安全凭证,然后使用这些安全凭证显式地调用其他华为云服务。
将临时安全凭证用于华为云SDK
要在代码中使用临时安全凭证,可以通过调用STS的AssumeAgency API,获取生成的临时安全凭证,包含临时AK/SK和会话令牌security_token。然后,您可以使用生成的临时安全凭证作为对华为云服务的后续API调用的凭证。以下示例说明了使用华为云SDK发起请求获取临时安全凭证的示例代码:
public static void main(String[] args) { // 配置认证信息 ICredential auth = new BasicCredentials() // 可通过环境变量等方式配置认证信息 .withAk(System.getenv("HUAWEICLOUD_SDK_AK")) .withSk(System.getenv("HUAWEICLOUD_SDK_SK")) // 如果未填写ProjectId,SDK会自动调用IAM服务查询所在region对应的项目id,注意经过VPCEP时,必须手动填写此参数 .withProjectId("{your projectId string}"); // 创建服务客户端 StsClient client = StsClient.newBuilder() .withCredential(auth) .withRegion(StsRegion.valueOf("{region id string}")) .build(); // 发送请求并获取响应 AssumeAgencyReqBody assumeAgencyReqBody = new AssumeAgencyReqBody() .withAgencyUrn("{your agency urn}") .withAgencySessionName("{agency session name}"); AssumeAgencyRequest request = new AssumeAgencyRequest().withBody(assumeAgencyReqBody); try { AssumeAgencyResponse response = client.assumeAgency(request); System.out.println(response.toString()); } catch (ConnectionException | RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } }
您必须确保在临时安全凭证到期之前,获得一组新的临时安全凭证。
直接调用API发起请求
直接向华为云发出HTTPS API请求,同样需要先通过调用STS的AssumeAgency API,获取生成的临时安全凭证。使用临时安全凭证签名调用的方式,与使用永久访问密钥进行签名调用的过程是一样的,唯一不同点是需要将临时安全凭证的会话令牌security_token添加到API请求的HTTP Header中,Header头为X-Security-Token。有关签署HTTPS API请求的更多信息,请参阅《API签名指南》。