文档首页/ 对象存储服务 OBS/ 最佳实践/ 在ECS上通过委托的临时安全凭证访问OBS
更新时间:2026-10-14 GMT+08:00
分享

在ECS上通过委托的临时安全凭证访问OBS

应用场景

假如您是一位开发者,使用OBS SDK开发了一个应用程序,这个应用程序运行在ECS实例上,应用程序的代码中涉及调用OBS API。因为OBS要求访问请求方出示访问凭证,所以您的API调用将会面临提供访问凭证的问题。

访问凭证按照时效性可分为永久凭证和临时凭证,相较于永久性访问凭证,例如用户名和密码,临时安全凭证因为有效期短且刷新频率高,所以安全性更高。因此,您的应用程序若想要以更安全的方式访问云服务,需要获取临时安全凭证,而IAM的委托功能,则支持通过ECS委托获取临时安全凭证。

图1 应用程序获取临时安全凭证访问OBS

如图1所示,因为OBS服务要求访问请求方提供访问凭证,所以应用程序需要获得委托的临时的AK、SK。应用程序与ECS元数据服务通信,ECS元数据服务再与IAM通信,拿到临时AK、SK后返回给应用程序。然后,应用程序将临时AK、SK作为访问凭证出示给OBS服务,OBS服务收到请求后,先校验访问凭证是否合法,凭证通过校验后,ECS实例上的应用程序才能访问OBS。

解决方案

针对以上应用场景,可使用IAM对ECS云服务的委托来获取临时安全凭证。在IAM上对ECS云服务授权,并对应用程序所在的ECS实例进行授权委托管理。ECS实例获得委托权限之后,应用程序可申请指定委托的临时安全凭证,从而以临时安全凭证为凭证安全访问华为云资源。详细方案如下:

  1. 创建ECS云服务委托。账号在IAM控制台创建委托,指定委托对象为ECS云服务。委托创建时,选择权限策略,选择可访问的资源范围,不同的委托对应不同的权限策略。
  2. ECS实例配置委托。在ECS实例的配置项中选择上一步创建的委托,一个ECS实例只可以选择一个委托。
  3. 获取委托的临时安全凭证。ECS实例配置了委托参数后,就获得了委托权限。此时,ECS实例上运行的应用程序可获取委托的临时安全凭证。拥有临时安全凭证的应用程序可与OBS进行交互,交互行为遵循账号授予的权限策略和资源使用范围。
图2 ECS委托

操作流程

图3 在ECS上获取临时访问密钥

实施步骤

如图3所示,配置ECS弹性云服务器委托分为创建ECS云服务委托、ECS实例配置委托、获取委托的临时安全凭证三步。详细步骤如下:

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

  1. 管理员进入IAM控制台创建委托界面。
  2. 在创建委托页面,设置“委托名称”
  3. “委托类型”选择“云服务”,在“云服务”中选择“弹性云服务器 ECS 裸金属服务器 BMS”。

    图4 创建委托

  4. 选择“持续时间”。
  5. (可选)填写“委托描述”。建议填写描述信息。
  6. 单击“完成”。
  7. 单击“下一步”,进入给委托授权页面。
  8. 在授权的确认弹窗中,单击“立即授权”。
  9. 勾选需要授予委托的权限,此处以勾选“OBS OperateAccess”权限为例。
  10. 单击“下一步”,选择权限的作用范围,此处以勾选“所有资源”为例。
  11. 单击“确定”,委托创建完成。
  12. 等待10~15分钟后,委托授权生效。

步骤二:为ECS实例配置委托

  1. 进入ECS产品页,单击ECS实例名,进入配置页面。

    图6 单击ECS实例名

  2. 管理信息栏目下,单击,为ECS实例选择委托。

    图7 为ECS实例选择委托

  3. 根据委托名选择步骤1创建的委托。

    图8 选择委托

  4. 单击,完成配置

步骤三:OBS Java SDK获取委托的临时访问凭证访问OBS

  1. 下载并安装OBS Java SDK。
  2. 创建OBS SDK客户端并初始化,使用EcsObsCredentialsProvider从ECS服务器自动获取临时访问密钥,该访问凭证会定期自动刷新。了解更多SDK初始化信息请参见初始化Java SDK。

    // endPoint以北京四为例,其他地区请按实际情况填写。
    String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
    // 创建ObsClient实例
    ObsClient obsClient = new ObsClient(new EcsObsCredentialsProvider(), endPoint);
    
    // 使用访问OBS
    
    // 关闭obsClient
    obsClient.close();

  3. 使用OBS客户端正常调动OBS SDK接口,详见OBS Java SDK接口。

相关文档