进阶使用 STS__授权管理_阿里云物联网套件-阿里云
进阶使用 STS
上面章节只用到了 RAM 的子账号功能,这些子账号都是可以长期正常使用的,发生泄露后如果无法及时解除权限,会非常危险。
当用户的数据很多时,要求能够安全的授权给众多iot的子帐户,并且多个子帐户的存储隔离。
类似这种场景需要临时访问权限,应该使用 STS 来完成。STS 可以指定复杂的策略来对特定的用户进行限制,仅提供最小的权限。
创建角色
之前已经解释过了角色的一些概念,本节将会给出使用角色的实际示例。请先创建一个名为 ram_test_iot 的子账号,再进行角色创建并授予其权限。这里创建两个角色,一个用于用户读取等操作,一个用于用户读写的操作。操作步骤如下:
使用主账号登录访问控制 RAM 的管理控制台。(默认已开通访问控制服务)
单击页面左侧的用户管理,进入用户管理页面。
单击右上角的新建用户,进入创建用户的页面,创建一个拥有和主账号一样完全访问表格存储权限的子账号。
填写账号信息并勾选“为该用户自动生成 AccessKey”,然后单击确定。示例中使用的用户名称是 ram_test_iot。
创建账号的最后一步会生成该账号的 AccessKey,单击保存 AK 信息。
注意:这是该账号的 AccessKey 可供下载的唯一机会,请及时保存。
创建完成后自动跳转至用户管理页面,名为 ram_test_iot 的账号会出现在该页面上。不需要赋予其任何权限,因为在扮演角色的时候会自动获得被扮演角色的所有权限。
单击页面左侧的角色管理,进入角色管理页面。
单击新建角色,进入创建角色页面。
选中用户角色,即直接进入填写角色类型信息页面。
由于角色本身是被阿里云账号使用过的,因此选择默认的即可。然后单击下一步。
输入角色名称(示例中使用 RamTestIotReadOnly),若有必要可填加备注,然后单击创建和关闭,完成角色创建。
单击页面左侧的策略管理,进入策略管理页面。
单击页面右侧的新建授权策略按钮,进入创建授权策略的页面。
选中“空白模板”,进入创建自定义授权策略的页面。
填写授权策略名称(示例中使用 ram-test-iot-readonly),并将如下内容填写至策略内容栏,这里表示对 ram-test-iot 拥有只读权限。
{
"Version": "1",
"Statement": [
{
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDatabases",
"rds:DescribeAccounts",
"rds:DescribeDBInstanceNetInfo"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:ListRoles",
"Effect": "Allow",
"Resource": "*"
},
{
"Action":[
"mns:ListTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"dhs:ListProject",
"dhs:ListTopic",
"dhs:GetTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ots:ListInstance",
"ots:ListTable",
"ots:DescribeTable"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action":[
"log:ListShards",
"log:ListLogStores",
"log:ListProject"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"iot:Query*",
"iot:List*",
"iot:Get*",
"iot:BatchGet*"
],
"Resource": "*"
}
]
}
- 单击页面左侧的角色管理,进入角色管理页面。
单击 RamTestIotReadOnly 右侧操作栏中的授权按钮,进入“编辑角色授权策略”页面。
搜索“ram-test-iot-readonly”,选中后单击 > 以将该权限添加至“已选择授权策略名称”栏中,最后单击确定,完成给该角色赋予对 ram-test-iot 拥有只读的权限。
按照上述同样的方法,建立一个 RamTestIotWrite 的角色,并赋予该角色写 ram-test-iot 的自定义授权,授权策略如下。
{
"Version": "1",
"Statement": [
{
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDatabases",
"rds:DescribeAccounts",
"rds:DescribeDBInstanceNetInfo"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:ListRoles",
"Effect": "Allow",
"Resource": "*"
},
{
"Action":[
"mns:ListTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"dhs:ListProject",
"dhs:ListTopic",
"dhs:GetTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ots:ListInstance",
"ots:ListTable",
"ots:DescribeTable"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action":[
"log:ListShards",
"log:ListLogStores",
"log:ListProject"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
在角色管理页面,可以看到已经新建好了 RamTestIOTReadOnly 和 RamTestIOTWrite 两个角色,分别表示了对于 ram-test-iot 的读写权限。
临时授权访问
创建角色后,就可以使用临时授权来访问物联网套件接口了。
准备工作
在使用 STS 来授权访问前,需要先对子账号进行需扮演角色的授权。若任意子账号都可以扮演这些角色,会带来不可预估的风险,因此有扮演对应角色需求的子账号需要被赋予相应的配置权限。在授权管理策略中新建两个自定义的授权策略并将其赋予 ram_test_app 这个子账号,操作步骤如下:
单击页面左侧的策略管理,进入策略管理页面。
单击页面右侧的新建授权策略按钮,进入创建授权策略的页面。
选中“空白模板”,进入创建自定义授权策略的页面。
填写授权策略名称,并将如下内容填写至策略内容栏。两个授权策略的内容分别为:
(注意:下文中 Resource 后面填写的内容表示某个角色 ID,角色的 ID 可以在角色管理页面,单击管理按钮进入角色详情的页面中找到。)
- AliyunIOTReadOnly
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:QueryProduct",
"Resource": "*"
}
]
}
上述的两个授权策略都建成后,单击页面左侧的用户管理,进入用户管理页面。
单击 ram_test_app 右侧操作栏中的授权按钮,进入“编辑个人授权策略”页面。
搜索“AliyunIOTReadOnly”,选中后单击 > 以将该权限添加至“已选择授权策略名称”栏中,最后单击确定,完成将这两个授权赋给 ram_test_app 这个账号的操作。
使用 STS
上述准备工作完成后,就可以正式使用 STS 来进行授权访问。这里需要使用 STS 的 Python 命令行工具,该工具安装包的下载地址如下:
- 点击下载:sts.py
具体的调用方法如下,更详细的参数解释可以参考STS 帮助文档。
$python ./sts.py AssumeRole RoleArn=acs:ram::1872177966808743:role/iotstsrole RoleSessionName=iotreadonlyrole Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":"iot:*","Resource":"*"}]}' DurationSeconds=1000 --id=id --secret=secret
参数说明:
RoleArn:指需要扮演的角色 ID。角色的 ID 可以在角色管理页面,单击管理按钮进入角色详情的页面中找到。
RoleSessionName:指临时凭证的名称,一般来说建议使用不同的应用程序用户来区分。
Policy:指在扮演角色时额外加上的一个权限限制。
(注意:这里传入的 Policy 是用来限制扮演角色之后的临时凭证的权限。最后临时凭证获得的权限是角色的权限和这里传入的 Policy 的交集。在扮演角色时传入 Policy 是为了灵活性,比如上传文件时可以根据不同的用户添加对于上传文件路径的限制,这点会在下面的例子展示。)
DurationSeconds:指临时凭证的有效期。单位是秒,最小为 900,最大为 3600。
id 和 secret:指需要扮演角色的子账号的 AccessKey 的 Access Key ID 和 Access Key Secret。
使用临时授权调用 JAVA SDK
请参考下面方式创建 IAcsClient 对象,传入 STS Token 的 AccessKeyId、AccessKeySecret 和 Token 等参数。
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessSecret);
RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
IAcsClient client = new DefaultAcsClient(profile);
AcsResponse response = client.getAcsResponse(request);
总结
本章主要介绍了如何使用 STS ,在典型的移动开发场景中,通过使用 STS,不同的用户拥有不同的权限,主账户拥有绝对的用户控制管理权限,子账号 AccessKey 泄露时不会其他账户影响,可以通过主账号管理该账户及时的对该用户进行权限控制,因此大大降低了泄露子账号信息的危害。在获取临时授权的时候,可以根据 用户的不同,传入不同的授权策略来限制用户的访问权限,从而达到隔离出不同用户拥有不同访问接口的目的。
最后更新:2016-11-24 16:11:19
上一篇:
设备数据共享__共享中心_控制台使用手册_阿里云物联网套件-阿里云
下一篇:
自定义权限__授权管理_阿里云物联网套件-阿里云
免密码访问__用户指南_云数据库 Memcache 版-阿里云
Notification操作__主题接口规范_API使用手册_消息服务-阿里云
负载均衡__产品使用手册_云解析-阿里云
GetUser__用户管理接口_RAM API文档_访问控制-阿里云
LogSearch-查询__Getting-Started_日志服务-阿里云
IP黑名单__访问控制_用户指南_CDN-阿里云
CapacityUnit__DataType_API 参考_表格存储-阿里云
开放API接入API网关__分步详解_API 网关-阿里云
Sqoop 作业配置__作业_用户指南_E-MapReduce-阿里云
PostObject__关于Object操作_API 参考_对象存储 OSS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云