创建临时角色后,您可以使用临时授权来访问表格存储。

前提条件

您已经完成了创建临时角色及授权

步骤一: 授权子账号扮演角色

在使用 STS 来授权访问前,需要先对子账号进行需扮演角色的授权。若任意子账号都可以扮演这些角色,会带来不可预估的风险,因此有扮演对应角色需求的子账号需要被赋予相应的配置权限。在授权管理策略中新建两个自定义的授权策略并将其赋予 ram_test_app 这个子账号,操作步骤如下:

  1. 创建两个自定义的授权策略,分别如下:
    说明 如何创建自定义策略,参见创建自定义策略
    • AliyunSTSAssumeRolePolicy2016011401
      {
      "Version": "1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Resource": "acs:ram:198***237:role/ramtestappreadonly"
          }
      ]
      }
      							
    • AliyunSTSAssumeRolePolicy2016011402
      {
      "Version": "1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Resource": "acs:ram:198***237:role/ramtestappwrite"
          }
      ]
      }
      							
  2. 将这两个授权赋给ram_test_app这个账号。
    说明 具体授权操作参见为RAM用户授权

步骤二: 使用 STS 进行授权访问

上述操作完成后就可以正式使用 STS 来进行授权访问。这里需要使用 STS 的 Python 命令行工具,该工具安装包的下载地址:sts.py

具体的调用方法如下,更详细的参数解释可以参考STS 帮助文档

$python ./sts.py AssumeRole RoleArn=acs:ram::198***237:role/ramtestappreadonly RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["ots:ListTable","ots:DescribeTable"],"Resource":["acs:ots:*:*:ram-test-app","acs:ots:*:*:ram-test-app/*"]}]}' DurationSeconds=1000 --id=id --secret=secret
			

参数说明:

参数 说明
RoleArn 指需要扮演的角色 ID。角色的 ID 可以在角色管理页面,单击管理按钮进入角色详情的页面中找到。
RoleSessionName 指临时凭证的名称,一般来说建议使用不同的应用程序用户来区分。
Policy 指在扮演角色时额外加上的一个权限限制。
说明 这里传入的 Policy 是用来限制扮演角色之后的临时凭证的权限。最后临时凭证获得的权限是角色的权限和这里传入的 Policy 的交集。在扮演角色时传入 Policy 是为了灵活性,比如上传文件时可以根据不同的用户添加对于上传文件路径的限制。
DurationSeconds 指临时凭证的有效期。单位是秒,最小为 900,最大为 3600。
id and secret 指需要扮演角色的子账号的 AccessKey 的 AccessKeyID 和 AccessKeySecret。

测试 STS

先在表格存储控制台创建名称为 test_write_read 的表,主键为 name,类型为 string,然后使用 CLI 工具测试读/写操作。

使用 ram_test_app 这个子账号直接来访问,请将下面的 AccessKey 换成自己测试用的 AccessKey。

python2.7 ots_console --url https://TableStoreTest.cn-hangzhou.ots.aliyuncs.com --id <yourAccessKeyId> --key <yourAccessKeySecret>
You cannot access the instance!
ErrorCode: OTSNoPermissionAccess
ErrorMessage: You have no permission to access the requested resource, please contact the resource owner.
			

由于 ram_test_app 这个子账号没有访问权限,因此访问失败。

使用临时授权读写数据、访问控制台

  • 使用临时授权写入数据

    使用 STS 来写入数据。这里为了简单,传入的 Policy 和角色的 Policy 一致,过期时间使用默认的 3600s,SessionName 假定为 session001。操作步骤如下:

    1. 使用 STS 来获取临时凭证。
      python2.7 ./sts.py AssumeRole RoleArn=acs:ram::198***237:role/ramtestappwrite RoleSessionName=session001 Policy='{"Statement": [{"Effect": "Allow","Action": ["ots:Create*","ots:BatchWrite*","ots:Put*","ots:Insert*","ots:Update*","ots:Delete*"],"Resource": ["acs:ots:*:*:instance/ram-test-app","acs:ots:*:*:instance/ram-test-app/table/*"]}],"Version": "1"}' --id=<yourAccessKeyId> --secret=<yourAccessKeySecret>
      {
      "AssumedRoleUser": {
          "Arn": "acs:ram::198***237:role/ramtestappwrite/session001", 
          "AssumedRoleId": "33062905274959****:session001"
      }, 
      "Credentials": {
          "AccessKeyId": "***", 
          "AccessKeySecret": "***"
          "SecurityToken": "CAE****0ZQ=="
      }, 
      "RequestId": "5F92B248-F200-40F8-A05A-C9C7D018E351"
      }
      							
    2. 使用 CLI 工具写入数据(版本 V1.2 开始支持 token 参数,待发布)。
          python2.7 ots_console --url https://TableStoreTest.cn-hangzhou.ots.aliyuncs.com --id <yourAccessKeyId> --key <yourAccessKeySecret> --token=CAE****0ZQ==
      
          OTS-TableStoreTest>$ put test_write_read '001' age:integer=30
          A new row has been put in table test_write_read
      							
  • 使用临时授权读取数据

    使用 STS 来读取数据。这里为了简单,传入的 Policy 和角色的 Policy 一致,过期时间使用默认的 3600s,SessionName 假定为 session002。操作步骤如下:

    1. 使用 STS 来获取临时凭证。
      python2.7 ./sts.py AssumeRole RoleArn=acs:ram::198***237:role/ramtestappreadonly RoleSessionName=session002 Policy='{"Statement": [{"Effect": "Allow","Action": ["ots:BatchGet*","ots:Describe*","ots:Get*","ots:List*"],"Resource": ["acs:ots:*:*:instance/ram-test-app","acs:ots:*:*:instance/ram-test-app/table/*"]}],"Version": "1"}' --id=6iT***lRt --secret=****
      {
      "AssumedRoleUser": {
          "Arn": "acs:ram::198***237:role/ramtestappreadonly/session002",
          "AssumedRoleId": "396025752746614078:session002"
      },
      "Credentials": {
          "AccessKeyId": "***",
          "AccessKeySecret": "***",
          "Expiration": "2016-01-14T08:14:16Z",
          "SecurityToken": "CAE****seQ=="
      }, 
      "RequestId": "EE788165-B760-4014-952C-E58ED229C80D"
      }
      							
    2. 使用 CLI 工具读取数据(版本 V1.2 开始支持 token 参数,待发布)。
          python2.7 ots_console --url https://TableStoreTest.cn-hangzhou.ots.aliyuncs.com --id STS***Q8Q --key **** --token=CAE****Q==
      
          OTS-TableStoreTest>: get test_write_read '001'
          age:INTEGER='30'
      							
  • 使用临时授权访问控制台

    STS 临时授权允许子账户登录表格存储控制台,并管理和查看主账号的实例和表资源。上面的例子中,子账号 ram_test_app 可以扮演 RamTestAppReadOnly 角色,从而拥有查看所有实例和所有表的权限。登录步骤如下:

    1. 使用主账号登录访问控制RAM控制台
    2. 使用主账号登录访问控制RAM控制台,进入概览页面。
    3. 单击RAM 用户登录链接后面的链接,进入阿里云 RAM 用户登录页面,输入子账号的 ram_test_app 用户名及密码进行登录。
    4. 登录成功后,单击页面右上角的用户名,然后单击切换身份,进入角色切换页面。
    5. 输入企业姓名和角色名,然后单击切换

步骤四: 使用临时授权调用 JAVA SDK

请参考以下方式创建 OTSClient 对象,传入 STS Token 的 AccessKeyId、AccessKeySecret 和 Token 等参数。

OTSClient client = new OTSClient(otsEndpoint, stsAccessKeyId, stsAccessKeySecret, instanceName, stsToken);