表格存储通过 JSON 格式的授权策略实现资源的精细化访问控制。本文介绍授权策略的语法结构,以及 Action、Resource、Condition 元素的取值与配置方式,适用于 Instance Policy、RAM Policy、Control Policy 等权限策略的编写。
授权语法
授权策略采用 JSON 格式描述,由版本号(Version)和一条或多条授权语句(Statement)组成。每条授权语句包含效果(Effect)、操作(Action)、资源(Resource)和条件(Condition)等基本元素。
语法结构
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:操作名称"],
"Resource": ["acs:ots:地域:账号ID:实例与资源路径"],
"Condition": {
"条件操作类型": {
"条件关键字": ["条件值"]
}
}
}
]
}字段说明
字段 | 说明 | 是否必填 |
Version | 授权策略的版本号,固定取值为 | 是 |
Statement | 授权语句的主体,支持配置一条或多条授权语句。 | 是 |
Effect | 授权效果,取值为 | 是 |
Action | 允许或拒绝的操作。更多信息,请参见Action。 | 是 |
Resource | 被授权的资源。更多信息,请参见Resource。 | 是 |
Condition | 授权生效的条件。更多信息,请参见Condition。 | 否 |
Action
Action 是对资源执行的操作,每个 Action 需添加ots:前缀,多个 Action 以半角逗号(,)分隔,支持使用星号(*)通配符(包括前缀匹配和后缀匹配)。典型的 Action 定义如下:
单个 API
"Action": "ots:GetRow"多个 API
"Action": [
"ots:PutRow",
"ots:GetRow"
]所有只读 API
"Action": [
"ots:BatchGet*",
"ots:Describe*",
"ots:Get*",
"ots:List*",
"ots:Consume*",
"ots:Search",
"ots:ComputeSplitPointsBySize"
]所有读写 API
"Action": "ots:*"所有 SQL 操作 API
"Action": "ots:SQL*"Resource
资源由产品、地域、账号 ID、实例名和表名等字段组成,通过 Resource 指定用户可访问的资源范围。每个字段均支持星号(*)通配符(包括前缀匹配和后缀匹配)。Resource 格式如下:
acs:ots:[region]:[user_id]:instance/[instance_name]/table/[table_name]其中产品固定取值为 ots,[region]为资源所在地域的 RegionID(例如 cn-hangzhou),[user_id]为阿里云账号 ID,[instance_name]为实例名称,[table_name]为表名称,请根据实际配置替换。
Tunnel 涉及的 Resource 定义只能到实例级别,即由产品、地域、账号 ID 和实例名组成。Resource 格式如下:
acs:ots:[region]:[user_id]:instance/[instance_name]注意事项
表格存储中实例名称不区分大小写,在 Resource 资源定义中的
[instance_name]请用小写表示。Action 和 Resource 通过字符串匹配进行验证,并且通配符星号(
*)区分前缀和后缀匹配。例如 Resource 定义为acs:ots:*:*:instance/abc时,无法匹配acs:ots:*:*:instance/abc/table/xyz。登录表格存储控制台管理实例资源时,由于控制台需要获取实例的列表,因此需要授予用户
acs:ots:[region]:[user_id]:instance/*资源的读取权限。对于批量操作 API(例如 BatchGetRow、BatchWriteRow),表格存储会对被访问的每张表分别鉴权,只有所有表都通过鉴权才能执行操作,否则会返回权限错误。
典型 Resource 定义
所有地域的所有账号的所有资源。
"Resource": "acs:ots:*:*:*"华东 1(杭州)地域、账号 123456 的所有实例及其下所有表。
"Resource": "acs:ots:cn-hangzhou:123456:instance*"华东 1(杭州)地域、账号 123456 中名称为 abc 的实例及其下所有表。
"Resource": [ "acs:ots:cn-hangzhou:123456:instance/abc", "acs:ots:cn-hangzhou:123456:instance/abc/table*" ]所有以 abc 开头的实例及其下所有表。
"Resource": "acs:ots:*:*:instance/abc*"所有以 abc 开头的实例下所有以 xyz 开头的表(不包括实例资源,不匹配
acs:ots:*:*:instance/abc*)。"Resource": "acs:ots:*:*:instance/abc*/table/xyz*"
API 类型与资源
目前表格存储的 API 主要分为实例管理类 API、表和数据读写类 API。不同类型 API 访问的资源的配置信息如下:
管理类API访问的资源
管理类 API 主要为实例相关的操作,控制台和 OpenAPI 都会调用。以下访问的资源省略了acs:ots:[region]:[user_id]:前缀,只描述实例部分。
API名称 | Action | 访问的资源 |
CreateInstance |
| instance/[instance_name] |
UpdateInstance |
| instance/[instance_name] |
GetInstance |
| instance/[instance_name] |
DeleteInstance |
| instance/[instance_name] |
ListInstances |
| instance/* |
ChangeResourceGroup |
| instance/[instance_name] |
ListTagResources |
| instance/* |
TagResources |
| instance/[instance_name] |
UntagResources |
| instance/[instance_name] |
UpdateInstancePolicy |
| instance/[instance_name] |
DeleteInstancePolicy |
| instance/[instance_name] |
CheckInstancePolicy |
| instance/[instance_name] |
UpdateInstanceElasticVCUUpperLimit |
| 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] |
CreateGlobalTable |
| instance/[instance_name]/table/[table_name] |
DescribeGlobalTable |
| instance/[instance_name]/table/[table_name] |
UpdateGlobalTable |
| instance/[instance_name]/table/[table_name] |
BindGlobalTable |
| instance/[instance_name]/table/[table_name] |
UnbindGlobalTable |
| instance/[instance_name]/table/[table_name] |
AddDefinedColumn |
| instance/[instance_name]/table/[table_name] |
DeleteDefinedColumn |
| 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] |
ComputeSplitPointsBySize |
| instance/[instance_name]/table/[table_name] |
StartLocalTransaction |
| instance/[instance_name]/table/[table_name] |
CommitTransaction |
| instance/[instance_name]/table/[table_name] |
AbortTransaction |
| instance/[instance_name]/table/[table_name] |
CreateIndex |
| instance/[instance_name]/table/[table_name] |
DropIndex |
| instance/[instance_name]/table/[table_name] |
CreateSearchIndex |
| instance/[instance_name]/table/[table_name] |
UpdateSearchIndex |
| instance/[instance_name]/table/[table_name] |
DeleteSearchIndex |
| instance/[instance_name]/table/[table_name] |
ListSearchIndex |
| instance/[instance_name]/table/[table_name] |
DescribeSearchIndex |
| instance/[instance_name]/table/[table_name] |
Search |
| instance/[instance_name]/table/[table_name] |
ComputeSplits |
| instance/[instance_name]/table/[table_name] |
ParallelScan |
| instance/[instance_name]/table/[table_name] |
CreateTunnel |
| instance/[instance_name]/table/[table_name] |
DeleteTunnel |
| instance/[instance_name]/table/[table_name] |
ListTunnel |
| instance/[instance_name]/table/[table_name] |
ConsumeTunnel |
| instance/[instance_name]/table/[table_name] |
DescribeTunnel |
| instance/[instance_name]/table/[table_name] |
BulkImport |
| instance/[instance_name]/table/[table_name] |
BulkExport |
| instance/[instance_name]/table/[table_name] |
SQL_Select |
| instance/[instance_name]/table/[table_name] |
SQL_Create |
| instance/[instance_name]/table/[table_name] |
SQL_DropMapping |
| instance/[instance_name]/table/[table_name] |
Condition
Condition 用于指定授权生效的限制条件,由条件操作类型、条件关键字和条件值组成。
条件操作类型
条件操作类型用于指定条件关键字与条件值的比较方式,支持字符串类型(String)、数字类型(Number)、日期类型(Date and time)、布尔类型(Boolean)、IP 地址类型(IP address)等。完整的条件操作类型及其运算符说明,请参见条件运算符。
条件关键字
表格存储支持配置的自定义 Condition 和通用 Condition 说明请参见下表。
类型 | 条件关键字 | 说明 |
表格存储自定义Condition |
| 适用于CreateTable、UpdateTable操作,是否只允许创建或更新加密表。 取值类型为String,取值范围为true、false。 配置示例: |
| 对来自可信代理(从控制台访问时为可信代理)的访问进行权限配置,是否只允许可信代理的访问。 取值类型为String,取值范围为true、false。 配置示例: | |
| 适用于CreateInstance、UpdateInstance操作,是否只允许创建不能从公网访问的实例。 取值类型为String,取值范围为true、false。 配置示例: | |
| 设置允许的客户端TLS版本,同时也限制了只能使用HTTPS协议进行访问。 取值类型为String,取值范围为TLSv1、TLSv1.1、TLSv1.2、TLSv1.3。 单个条件中支持同时配置多个TLS版本。当配置多个TLS版本时,客户端采用配置中的任意一种TLS版本访问表格存储均可成功。 | |
| 限制访问来源的用户AccessKey ID(AK)。 取值类型为String。如果有多个AccessId,请按行输入,一行输入一个AccessId。 | |
通用Condition |
| 限制访问来源的IP地址或网段。 取值类型为String,取值范围为IPv4/IPv6的IP地址、CIDR网段。单个条件中支持同时配置多个IP地址或IP网段。 重要 配置Instance Policy时,如果配置了 |
| 限制访问来源的VPC。 取值类型为String,取值范围为源端的VPC ID以及 | |
| 限制请求的协议类型,即是否通过安全传输(HTTPS)访问。 取值类型为Bool,取值范围如下:
如果未设置 | |
| 限制请求到达表格存储服务端的时间。 取值类型为Date and time,格式为ISO8601,例如 | |
| 限制是否通过MFA(多因素认证)访问。 取值类型为Bool,取值范围为true、false。 |