全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
表格存储

自定义权限

更新时间:2017-11-14 16:37:33

Action 定义

Action 是 API 的名称,可以根据 Action 设置开放或限制用户可以访问的 API。在创建表格存储的授权策略时,每个 Action 都需要添加ots:前缀,多个 Action 以逗号分隔,并且支持星号通配符(包括前缀匹配和后缀匹配)。

下面是一些典型的 Action 定义:

  • 单个 API

    1. "Action": "ots:GetRow"
  • 多个 API

    1. "Action": [
    2. "ots:PutRow",
    3. "ots:GetRow"
    4. ]
  • 所有只读 API

    1. "Action": [
    2. "ots:BatchGet*",
    3. "ots:Describe*",
    4. "ots:Get*",
    5. "ots:List*"
    6. ]
  • 所有读写 API

    1. "Action": "ots:*"

Resource 定义

表格存储的资源由产品、地域、用户 ID、实例名和表名多个字段组成。每个字段支持星号通配符(包括前缀匹配和后缀匹配),格式如下。

  1. acs:ots:[region]:[user_id]:instance/[instance_name]/table/[table_name]

其中,[xxx] 表示变量,产品固定为 ots,地域为英文缩写(如 cn-hangzhou, 详情请参考节点),用户 ID 为阿里云账号 ID。

注意:表格存储中实例名称不区分大小写,上述 Resource 资源定义中的 [instance_name] 请用小写表示。

下面是一些典型的 Resource 定义:

  • 所有地域的所有用户的所有资源

    1. "Resource": "acs:ots:*:*:*"
  • 华东 1 区域,用户 123456 的所有实例及其下面所有的表

    1. "Resource": "acs:ots:cn-hangzhou:123456:instance/*"
  • 华东 1 区域,用户 123456 的名称为 abc 的实例及其下面所有的表

    1. "Resource": [
    2. "acs:ots:cn-hangzhou:123456:instance/abc",
    3. "acs:ots:cn-hangzhou:123456:instance/abc/table/*"
    4. ]
  • 所有以 abc 开头的实例及下面的所有表

    1. "Resource": "acs:ots:*:*:instance/abc*"
  • 所有以 abc 开头的实例下面的所有以 xyz 开头的表(不包括实例资源,不匹配 acs:ots:*:*:instance/abc*)

    1. "Resource": "acs:ots:*:*:instance/abc*/table/xyz*"
  • 所有以 abc 结尾的 Instance 及下面的所有以 xyz 结尾的表

    1. "Resource": [
    2. "acs:ots:*:*:instance/*abc",
    3. "acs:ots:*:*:instance/*abc/table/*xyz"
    4. ]

表格存储的 API 类型

目前表格存储包含以下两类 API:

  • 实例读写相关的管理类 API

  • 表和行读写相关的数据类 API

各 API 的类别详情如下表所示:

API 名称/Action API 类别 说明
ListInstance 管理类 获取实例列表,仅控制台调用。
InsertInstance 管理类 创建实例,仅控制台调用。
GetInstance 管理类 获取实例信息,仅控制台调用。
DeleteInstance 管理类 删除实例,仅控制台调用。
ListTable 数据类 获取表的列表,控制台和 SDK 调用。
CreateTable 数据类 创建表,控制台 和 SDK 调用。
UpdateTable 数据类 更新表信息,控制台和 SDK 调用。
DescribeTable 数据类 获取表信息,控制台和 SDK 调用。
DeleteTable 数据类 删除表,控制台和 SDK 调用。
GetRow 数据类 读取一行数据,仅 SDK 调用。
PutRow 数据类 插入一行数据,仅 SDK 调用。
UpdateRow 数据类 更新一行数据,仅 SDK 调用。
DeleteRow 数据类 删除一行数据,仅 SDK 调用。
GetRange 数据类 范围读取数据,仅 SDK 调用。
BatchGetRow 数据类 批量读取多行数据,仅 SDK 调用。
BatchWriteRow 数据类 批量写入多行数据,仅 SDK 调用。

管理类 API 访问的资源

管理类 API 主要为实例相关的操作,仅由控制台调用。对这类 API 的 Action和 Resource定义,将影响用户使用控制台。下面访问的资源省略了 acs:ots:[region]:[user_id]: 前缀,只描述实例和表部分。

API 名称/Action 访问的资源
ListInstance instance/*
InsertInstance instance/[instance_name]
GetInstance instance/[instance_name]
DeleteInstance instance/[instance_name]

数据类 API 访问的资源

数据类 API 主要为表和行相关的操作,控制台和 SDK 都会调用,对这类 API 的 Action 和 Resource 定义,将影响用户使用控制台。下面访问的资源省略了 acs:ots:[region]:[user_id]: 前缀,只描述实例和表部分。

API 名称/Action 访问的资源
ListTable instance/[instance_name]/table/*
CreateTable instance/[instance_name]/table/[table_name]
UpdateTable instance/[instance_name]/table/[table_name]
DescribeTable instance/[instance_name]/table/[table_name]
DeleteTable instance/[instance_name]/table/[table_name]
GetRow instance/[instance_name]/table/[table_name]
PutRow instance/[instance_name]/table/[table_name]
UpdateRow instance/[instance_name]/table/[table_name]
DeleteRow instance/[instance_name]/table/[table_name]
GetRange instance/[instance_name]/table/[table_name]
BatchGetRow instance/[instance_name]/table/[table_name]
BatchWriteRow instance/[instance_name]/table/[table_name]

常见问题说明

  • Policy 里 Action 和 Resource 通过字符串匹配进行验证的,并且星号通配符区分前缀和后缀匹配。如果 Resource 定义为 acs:ots:*:*:instance/*/,则无法匹配 acs:ots:*:*:instance/abc。如果 Resource 定义为 acs:ots:*:*:instance/abc,则无法匹配 acs:ots:*:*:instance/abc/table/xyz。

  • 登录表格存储控制台管理实例资源,需要授予用户 acs:ots:[region]:[user_id]:instance/* 资源的读取权限,因为控制台需要获取实例的列表。

  • 对于批量操作 API(如 BatchGetRow 和 BatchWriteRow),后端服务会对被访问的每张表分别鉴权,只有所有表都通过鉴权才能执行操作,否则会返回权限错误。

Condition 定义

目前 Policy 支持访问 IP 限制、是否通过 HTTPS 访问、是否通过 MFA(多因素认证)访问和访问时间限制等多种鉴权条件,表格存储所有 API 都已经支持这些条件。

访问 IP 限制

访问控制 RAM 可以限制访问表格存储的源 IP 地址,并且支持根据网段进行过滤。下面是一些典型的使用场景:

  • 限制多个 IP 地址。例如,只允许 IP 地址为 10.101.168.111 和 10.101.169.111 的请求访问。

    1. {
    2. "Statement": [
    3. {
    4. "Effect": "Allow",
    5. "Action": "ots:*",
    6. "Resource": "acs:ots:*:*:*",
    7. "Condition": {
    8. "IpAddress": {
    9. "acs:SourceIp": [
    10. "10.101.168.111",
    11. "10.101.169.111"
    12. ]
    13. }
    14. }
    15. }
    16. ],
    17. "Version": "1"
    18. }
  • 限制单个 IP 地址和 IP 网段。例如,只允许 IP 地址为 10.101.168.111 或 10.101.169.111/24 网段的请求访问。

    1. {
    2. "Statement": [
    3. {
    4. "Effect": "Allow",
    5. "Action": "ots:*",
    6. "Resource": "acs:ots:*:*:*",
    7. "Condition": {
    8. "IpAddress": {
    9. "acs:SourceIp": [
    10. "10.101.168.111",
    11. "10.101.169.111/24"
    12. ]
    13. }
    14. }
    15. }
    16. ],
    17. "Version": "1"
    18. }

HTTPS 访问限制

访问控制可以限制是否通过 HTTPS 访问。

下面是典型的使用场景,限制请求必须通过 HTTPS 访问。

  1. {
  2. "Statement": [
  3. {
  4. "Effect": "Allow",
  5. "Action": "ots:*",
  6. "Resource": "acs:ots:*:*:*",
  7. "Condition": {
  8. "Bool": {
  9. "acs:SecureTransport": "true"
  10. }
  11. }
  12. }
  13. ],
  14. "Version": "1"
  15. }

MFA 访问限制

访问控制可以限制是否通过 MFA(多因素认证)访问。

下面是典型的使用场景,限制请求必须通过 MFA 访问。

  1. {
  2. "Statement": [
  3. {
  4. "Effect": "Allow",
  5. "Action": "ots:*",
  6. "Resource": "acs:ots:*:*:*",
  7. "Condition": {
  8. "Bool": {
  9. "acs:MFAPresent ": "true"
  10. }
  11. }
  12. }
  13. ],
  14. "Version": "1"
  15. }

访问时间限制

访问控制可以限制请求的访问时间,即只允许或拒绝在某个时间点范围之前的请求。下面是典型的使用场景。

例如,北京时间 2016 年 1 月 1 号凌晨之前用户可以访问,之后就不能再访问。

  1. {
  2. "Statement": [
  3. {
  4. "Effect": "Allow",
  5. "Action": "ots:*",
  6. "Resource": "acs:ots:*:*:*",
  7. "Condition": {
  8. "DateLessThan": {
  9. "acs:CurrentTime": "2016-01-01T00:00:00+08:00"
  10. }
  11. }
  12. }
  13. ],
  14. "Version": "1"
  15. }

典型使用场景

结合上面对 Action、Resource 和 Condition 的定义,下面列出一些典型使用场景的 Policy 定义和授权方法。

多种授权条件

对于访问 IP 地址为 10.101.168.111/24 网段的用户,可以对所有名称为 online-01 和 online-02 的实例执行读/写操作(包括实例下面的所有表),且要求只能在 2016-01-01 00:00:00 之前访问和通过 HTTPS 访问。

操作步骤如下:

  1. 使用主账号登录访问控制 RAM 的管理控制台。(默认已开通访问控制服务)

  2. 单击页面左侧的策略管理,进入策略管理页面。

  3. 单击右上角的新建授权策略按钮,进入创建授权策略的页面。

  4. 选择空白模板,进入创建自定义授权策略的页面。

  5. 填写授权策略名称,并将如下内容填写至策略内容栏。

    1. {
    2. "Statement": [
    3. {
    4. "Effect": "Allow",
    5. "Action": "ots:*",
    6. "Resource": [
    7. "acs:ots:*:*:instance/online-01",
    8. "acs:ots:*:*:instance/online-01/table/*",
    9. "acs:ots:*:*:instance/online-02",
    10. "acs:ots:*:*:instance/online-02/table/*"
    11. ],
    12. "Condition": {
    13. "IpAddress": {
    14. "acs:SourceIp": [
    15. "10.101.168.111/24"
    16. ]
    17. },
    18. "DateLessThan": {
    19. "acs:CurrentTime": "2016-01-01T00:00:00+08:00"
    20. },
    21. "Bool": {
    22. "acs:SecureTransport": "true"
    23. }
    24. }
    25. }
    26. ],
    27. "Version": "1"
    28. }
  6. 单击新建授权策略,授权策略新建成功,然后单击关闭

  7. 单击页面左侧的用户管理,进入用户管理页面将新建的策略授权给需要的子账号。

  8. 找到需要授权的子账号,单击其右侧操作栏下面的授权按钮,进入“编辑个人授权”页面。

  9. 搜索刚才新建的策略名称,选中后单击 > 以将该权限添加至“已选择授权策略名称”栏中,最后单击确定,完成对该账号的策略授权。

拒绝请求

对于访问 IP 地址为 10.101.169.111 的用户,拒绝对北京区域,名称以 online 和 product 开头的实例下面的所有表执行写操作(不包括对实例的操作)。

创建自定义授权策略和给子账号授权的步骤同上,只需将如下内容填写至策略内容栏即可。

  1. {
  2. "Statement": [
  3. {
  4. "Effect": "Deny",
  5. "Action": [
  6. "ots:Create*",
  7. "ots:Insert*",
  8. "ots:Put*",
  9. "ots:Update*",
  10. "ots:Delete*",
  11. "ots:BatchWrite*"
  12. ],
  13. "Resource": [
  14. "acs:ots:cn-beijing:*:instance/online*/table/*",
  15. "acs:ots:cn-beijing:*:instance/product*/table/*"
  16. ],
  17. "Condition": {
  18. "IpAddress": {
  19. "acs:SourceIp": [
  20. "10.101.169.111"
  21. ]
  22. }
  23. }
  24. }
  25. ],
  26. "Version": "1"
  27. }
本文导读目录