全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云SDK开发指南

使用STS Token作为用户凭据

更新时间:2018-02-11 18:43:16

直接使用阿里云账号的主账号的Access Key IDAccess Key Secret进行应用开发会有一定的安全风险,为了提升安全性,除了通过RAM角色控制权限,您还可以使用为RAM角色签发的STS Token来访问阿里云服务。

使用STS Token调用SDK有以下好处:

  • 减少了主账号Access Key IDAccess Key Secret泄露的风险,特别是移动设备等场景。

  • 能使用灵活的权限控制,STS Token有一定的时间限制,并且根据RAM角色的灵活设置对ECS、SLB资源的精细授权。

本文介绍如何使用STS Token来调用SDK访问阿里云服务,更多关于RAM和STS的资料,参见RAM和STS介绍

说明: 在使用STS Token前,点击这里查看目标产品是否支持该验证方式。

方式一:直接使用STS Token

在这种方式下,您需要自行维护STS Token的周期性更新。

  • 不使用自定义配置:

    1. // 如果您不需要自定义config,我们提供了一个快捷入口来构建client
    2. client, err = ecs.NewClientWithStsToken("region-id", "sts-access-key-id",
    3. "sts-access-key-secret", "sts-session-token")
  • 使用自定义配置

    1. // 如果您需要自定义config,您可以使用下列代码来构建client
    2. config := sdk.NewConfig().WithEnableAsync(true)
    3. // 创建credential对象
    4. credential := credentials.NewStsTokenCredential("sts-access-key-id",
    5. "sts-access-key-secret", "sts-session-token")
    6. // 初始化client
    7. client, err := ecs.NewClientWithOptions("region-id", config, credential)

其中:

  • region-id是您正在使用的地域的ID,详情参见地域列表

  • sts-access-key-id sts-access-key-secret sts-session-token 是通过STS的AssumeRole请求返回的授权信息,与AccessKeyId/AccessKeySecret不同

方式二:使用SDK自动管理STS Token的周期

您可以通过传入RAM中的角色信息,让SDK帮您自动申请并维护STS Token。

  • 不使用自定义配置:

    1. // 如果您不需要自定义config,我们提供了一个快捷入口来构建client
    2. client, err = ecs.NewClientWithRamRoleArn("region-id", "sts-access-key-id",
    3. "sts-access-key-secret", "role-arn", "session-role-name")
  • 使用自定义配置:

    1. // 如果您需要自定义config,您可以使用下列代码来构建client
    2. config := sdk.NewConfig()
    3. // 创建credential对象
    4. credential := credentials.NewRamRoleArnCredential("sts-access-key-id",
    5. "sts-access-key-secret", "role-arn", "role-session-name")
    6. // 初始化client
    7. client, err := ecs.NewClientWithOptions("region-id", config, credential)

其中:

  • role-arn 是角色全局资源描述符。您可以在RAM控制台-角色管理页面,单击角色名称进入详情页后查询角色名对应的role-arn

  • role-session-name 是临时角色名称。您可以通过调用AssumeRole获取一个扮演该角色的临时身份。创建成功后,便可以使用创建时的RoleSessionName作为本方式的role-session-name参数。

本文导读目录