如果系统权限策略不能满足您的需求,您可以通过创建自定义权限策略实现精细化权限管理。
背景信息
权限指在特定条件下 ,允许(Allow)或拒绝(Deny)对指定资源执行的相关操作。权限的载体是授权策略。自定义权限,即在自定义授权策略时定义某些权限。
创建自定义权限策略方式,请参见创建方式。本文介绍通过脚本编辑模式创建自定义权限策略的操作步骤。
操作步骤
- 使用阿里云账号登录RAM控制台。
- 在左侧导航栏,选择 。
- 在权限策略页面,单击创建权限策略。
- 在创建权限策略页面,单击脚本编辑页签。
输入权限策略内容,然后单击继续编辑基本信息。
关于权限策略语法结构的详情,请参见权限策略语法和结构。权限策略中包含参数如下:
Action:表示要授权的操作。IoT操作都以
iot:
开头。定义方式和示例,请参见本文档中Action定义。Effect : 表示授权类型,取值:Allow(允许)、Deny(拒绝)。
Resource :表示要授权的资源。
如果为RAM用户授予访问您的所有物联网平台资源的权限,取值为
*
。Condition :表示鉴权条件,请参见本文档中Condition定义。
关于权限策略元素的详情,请参见权限策略基本元素。
输入权限策略名称和备注。
- 检查并优化权限策略内容。
- 基础权限策略优化
系统会对您添加的权限策略语句自动进行基础优化。基础权限策略优化会完成以下任务:
- 删除不必要的条件。
- 删除不必要的数组。
- 可选:高级权限策略优化
您可以将鼠标悬浮在可选:高级策略优化上,单击执行,对权限策略内容进行高级优化。高级权限策略优化功能会完成以下任务:
- 拆分不兼容操作的资源或条件。
- 收缩资源到更小范围。
- 去重或合并语句。
- 基础权限策略优化
- 单击确定。
Action 定义
Action是API的名称。在创建IoT授权策略时,每个Action前缀均为iot:
,多个Action以英文逗号(,)分隔,支持使用星号(*)通配符。IoT API名称定义,请参见IoT授权映射表。
下面介绍一些典型的Action定义示例。
定义单个API。
"Action": "iot:CreateProduct"
定义多个API。
"Action": [ "iot:UpdateProduct", "iot:QueryProduct" ]
定义所有只读API,包含规则引擎数据流转目标产品的权限。
{ "Version": "1", "Statement": [ { "Action": [ "iot:Query*", "iot:List*", "iot:Get*", "iot:BatchGet*", "iot:Check*" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "rds:DescribeDBInstances", "rds:DescribeDatabases", "rds:DescribeAccounts", "rds:DescribeDBInstanceNetInfo" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:ListRoles", "Resource": "*", "Effect": "Allow" }, { "Action": [ "mns:ListTopic", "mns:GetTopicRef" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ots:ListInstance", "ots:GetInstance", "ots:ListTable", "ots:DescribeTable" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "fc:ListServices", "fc:GetService", "fc:GetFunction", "fc:ListFunctions" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "log:ListShards", "log:ListLogStores", "log:ListProject" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "cms:QueryMetricList" ], "Resource": "*", "Effect": "Allow" } ] }
定义所有读写API,包含规则引擎数据流转目标产品的权限。
{ "Version": "1", "Statement": [ { "Action": "iot:*", "Resource": "*", "Effect": "Allow" }, { "Action": [ "rds:DescribeDBInstances", "rds:DescribeDatabases", "rds:DescribeAccounts", "rds:DescribeDBInstanceNetInfo", "rds:ModifySecurityIps" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:ListRoles", "Resource": "*", "Effect": "Allow" }, { "Action": [ "mns:ListTopic", "mns:GetTopicRef" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ots:ListInstance", "ots:ListTable", "ots:DescribeTable", "ots:GetInstance" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "fc:ListServices", "fc:GetService", "fc:GetFunction", "fc:ListFunctions" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "log:ListShards", "log:ListLogStores", "log:ListProject" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:PassRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "acs:Service": "iot.aliyuncs.com" } } }, { "Action": [ "cms:QueryMetricList" ], "Resource": "*", "Effect": "Allow" } ] }
Condition定义
目前RAM用户授权策略支持访问IP限制、是否通过HTTPS访问、是否通过MFA(多因素认证)访问、访问时间限制等多种鉴权条件。物联网平台的所有API均支持上述条件。
访问IP限制。
访问控制可以限制访问IoT的源IP地址,并且支持根据网段进行过滤。以下是典型的使用场景示例。
限制单个IP地址和IP网段。例如,只允许IP地址为192.0.2.1或198.51.100.0/24网段的请求访问。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "192.0.2.1", "198.51.100.0/24" ] } } } ], "Version": "1" }
限制多个IP地址。例如,只允许IP地址为192.0.2.1和198.51.100.1的请求访问。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "192.0.2.1", "198.51.100.1" ] } } } ], "Version": "1" }
HTTPS访问限制。
访问控制可以限制是否通过HTTPS访问。
示例:限制必须通过HTTPS请求访问。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "Bool": { "acs:SecureTransport": "true" } } } ], "Version": "1" }
MFA访问限制。
访问控制可以限制是否通过MFA(多因素认证)访问。MFA访问适用于控制台登录,使用API访问无需MFA码。
示例:限制必须通过MFA请求访问。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "Bool": { "acs:MFAPresent ": "true" } } } ], "Version": "1" }
访问时间限制。
访问控制可以限制请求的访问时间,即只允许或拒绝在某个时间点范围之前的请求。
示例:用户可以在北京时间2019年01月01日凌晨之前访问,之后则不能访问。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "DateLessThan": { "acs:CurrentTime": "2019-01-01T00:00:00+08:00" } } } ], "Version": "1" }
典型使用场景
结合以上对Action、Resource和Condition的定义,下面介绍一些典型使用场景的授权策略定义和授权方法。
允许访问的授权策略示例。
场景:定义访问IP地址为192.0.2.1/24网段的用户访问IoT的权限,且要求只能在2019-01-01 00:00:00之前访问和通过HTTPS访问。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "192.0.2.1/24" ] }, "DateLessThan": { "acs:CurrentTime": "2019-01-01T00:00:00+08:00" }, "Bool": { "acs:SecureTransport": "true" } } } ], "Version": "1" }
拒绝访问的授权策略示例。
场景:拒绝访问IP地址为198.51.100.1的用户对IoT执行读操作。
{ "Statement": [ { "Effect": "Deny", "Action": [ "iot:Query*", "iot:List*", "iot:Get*", "iot:BatchGet*" ], "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "198.51.100.1" ] } } } ], "Version": "1" }
授权策略创建成功后,将此权限授予RAM用户,获得授权的RAM用户就可以进行权限中定义的操作。创建RAM用户和授权操作,请参见RAM用户访问。