文档首页/函数工作流 FunctionGraph/最佳实践/性能优化与安全类实践/在FunctionGraph上通过委托获取临时凭证访问其他云服务
更新时间:2026-03-26 GMT+08:00
分享

在FunctionGraph上通过委托获取临时凭证访问其他云服务

方案概述

在华为云函数工作流FunctionGraph中,函数往往需要访问华为云其他服务(如对象存储服务OBS、云数据库RDS、云日志LTS等)来完成业务操作。这些云服务要求调用方提供合法的访问凭证,因此,如何在函数中安全地获取并使用凭证,是开发过程中需要解决的关键问题。

访问凭证按时效性可分为永久凭证和临时凭证两类。直接在函数代码中硬编码永久凭证(如固定 AK/SK),一旦泄露将带来严重的安全风险。相比之下,临时访问密钥有效期短、支持自动轮换,安全性更高,是推荐的做法。

借助 IAM 服务的委托功能,可以便捷地实现临时凭证的自动获取,具体步骤如下:

  1. 创建云服务委托:通过IAM 创建FunctionGraph云服务委托,明确所需的访问权限范围。
  2. 配置函数委托:将创建好的委托配置到需要跨服务访问的函数上。
  3. 代码中获取凭证:函数运行时,直接通过context接口获取临时访问密钥,无需手动管理凭证,也无需调用额外的API。

操作流程

在FunctionGraph上通过委托获取临时凭证访问其他云服务的操作流程如图1所示,步骤详情如表1所示。

图1 操作流程
表1 操作步骤说明

步骤

步骤说明

步骤一:创建FunctionGraph云服务委托

在统一身份认证服务IAM上创建函数工作流FunctionGraph云服务委托,并为该委托授权所需调用的服务权限和授权范围。

步骤二:为函数配置委托

在函数工作流FunctionGraph控制台为函数配置委托,授予函数访问其他云服务的权限。

步骤三:获取委托的临时凭证

在函数代码中通过context接口获取临时访问密钥,即可通过委托获取临时凭证安全地访问其他云服务。

步骤一:创建FunctionGraph云服务委托

  1. 登录统一身份认证服务(IAM)控制台
  2. 在左侧导航窗格中,选择“委托”页签,单击右上方的“创建委托”。
    图2 创建委托
  3. 配置委托参数,完成参数配置后如图3所示,单击“完成”,系统弹出“创建成功”提示,单击“立即授权”。
    图3 填写基本信息
    表2 委托配置参数

    参数

    取值

    说明

    委托名称

    serverless-trust

    自定义填写委托名称。

    委托类型

    云服务

    选择将账号内资源的操作权限委托给云服务。

    云服务

    函数工作流 FunctionGraph

    选择需要授权的云服务。

    持续时间

    永久

    选择委托生效的持续时间,实际使用时请根据业务需求填写。

    描述

    -

    可选参数,填写委托的描述信息。

  4. 进入“选择策略”页面,在右方搜索框中搜索需要添加的权限并勾选,单击“下一步”

    如果系统策略不满足授权要求,管理员可以通过“可视化视图”和“JSON视图”两种方式创建自定义策略,详情请参见创建自定义策略

  5. 进入“设置最小授权范围”页面,建议根据最小授权原则勾选所需的授权范围。勾选完成后单击“确定”,进入“授权成功”界面,完成委托授权。

步骤二:为函数配置委托

如未创建函数,可在创建函数时为新函数配置委托;如已有目标函数,可在函数详情页中配置函数委托。

步骤三:获取委托的临时凭证

进入函数详情页后,可通过在线编辑或上传已有代码包的方式部署函数代码,在函数代码中可使用context接口中的方法获取临时访问密钥,结合您的实际业务代码即可通过委托获取临时凭证安全地访问其他云服务。

以下为各运行时获取临时访问密钥的代码片段示例:

表4 不同运行时临时访问密钥获取

运行时

获取说明

Node.js

更多SDK接口说明请参见Node.js SDK接口

示例:

const ak = context.getSecurityAccessKey()
const sk = context.getSecuritySecretKey()
const st = context.getSecurityToken()

Python

更多SDK接口说明请参见Python SDK接口

示例:

ak = context.getSecurityAccessKey()
sk = context.getSecuritySecretKey()
st = context.getSecurityToken()

Java

更多SDK接口说明请参见Java SDK接口

示例:

String ak = context.getSecurityAccessKey();
String sk = context.getSecuritySecretKey();
String st = context.getSecurityToken();

C#

更多SDK接口说明请参见C# SDK接口

示例:

string ak = context.SecurityAccessKey; 
string sk = context.SecuritySecretKey; 
string st = context.SecurityToken;

Go

更多SDK接口说明请参见Go SDK接口

示例:

ak := context.getSecurityAccessKey() 
sk := context.getSecuritySecretKey() 
st := context.getSecurityToken()

PHP

更多SDK接口说明请参见PHP SDK接口

示例:

$ak = $context -> getSecurityAccessKey();                                       
$sk = $context -> getSecuritySecretKey();                                      
$st = $context -> getSecurityToken();  

相关文档