流控策略(QoSPolicy)是一种管理对象存储访问流量资源的策略,支持按照用户需求管理多业务访问资源组的流控能力,保障多种业务在访问同一份存储资源情况下流量互不干扰,高效运行。
适用场景
流控策略支持按照账号、用户、角色等维度限制访问 TOS 资源组的流量,支持流控策略生效资源范围为 TOS 所有桶、指定桶或桶内指定对象等多种资源组合,实现多个业务隔离,确保不同业务之间的资源使用不会相互影响,适用于多租户、多部门、多产品使用 TOS 的场景。
参数说明
Statement 是主要策略元素的容器,可以在一个策略中包含多个语句,每个 Statement 包含以下参数。
参数 | 是否必选 | 说明 | 示例 |
---|
Sid | 可选 | 策略名称,限制如下: - 策略名称不能重复。
- 只能包含大小写字母、数字、中划线(-)、下划线(_)、英文句号(.)、英文冒号(:)、百分号(%)。
- 长度限制在 1~255 字符之间。
如果不填,则 TOS 会自动生成策略名称。 | {"Sid":"Test"}
|
Quota | 必填 | 设置流控类别,取值说明如下: WritesQps :写请求的 QPS,值必须是正整数。ReadsQps :读请求的 QPS,值必须是正整数。ListQps :List 请求的 QPS,值必须是正整数。WritesRate :上传带宽,单位为 Mbps,值必须是正整数。ReadsRate :下载带宽,单位为 Mbps,值必须是正整数。
| {
"WritesQps": "100",
"ReadsQps": "100",
"ListQps": "100",
"WritesRate": "10",
"ReadsRate": "10"
}
|
Resource | 必填 | 设置流控策略作用的资源。 - 以字符串形式表示,不区分大小写,格式为
"Resource": ["trn:tos:::{BucketName}/{Object}"] 。 - 支持通配符
* ,说明如下:
- 将通配符
* 设置在桶上,表示所有桶,例如 "trn:tos:::*" 。 - 将通配符
* 设置在对象上,表示桶内所有资源,例如"trn:tos:::bucketname/*" - 将通配符设置在对象前缀上,表示该前缀的所有对象,例如
"trn:tos:::bucketname/objectPrefix*" 。
| "Resource":[
"trn:tos:::*", // 流控策略作用于所有桶
"trn:tos:::bucketname/*", // 流控策略作用于 bucketname 桶下的所有对象
"trn:tos:::bucketname/objectPrefix*" // 流控策略作用于 bucketname 桶下前缀为 objectPrefix 的对象
]
|
Principal | 必填 | 指定需要进行流控的账号、IAM 用户或角色。 | {
"Principal": [
// 对 200000**** 下的 tos_role 角色进行流控
"trn:iam::200000****:role/tos_role",
// 对 200000**** 下 的 tos_user 用户进行流控
"trn:iam::200000****:user/tos_user",
// 对 200001**** 进行流控。
"trn:iam::200001****:root"
// 对所有用户进行流控
"*"
]
}
|
Condition | 可选 | 指定流控策略在哪些情况下生效。关于条件的详细说明,请参见条件说明。 | "Condition": {
"IpAddress": {
"SourceIp": [
"192.168.0.1",
"192.168.0.3"
]
}
}
|
流控策略示例如下:
以下策略设置 aaa 子用户在 bucketname 桶的上传带宽上限为 5000 Mbps。更多流控策略案例,请参见流控策略使用案例。
{
"Statement": [
{
"Sid": "test",
"Quota": {
"WritesQps": "",
"ReadsQps": "",
"ListQps": "",
"WritesRate": "5000",
"ReadsRate": ""
},
"Principal": [
"trn:iam::200000****:user/aaa"
],
"Resource": "trn:tos:::bucketname/*"
}
]
}
条件说明
条件决定流控策略生效的要求,只有请求信息满足条件时,流控策略才会生效。条件由条件键、条件运算符及值组成。流控策略支持的条件如下。
支持的条件
键 | 类型 | 键说明 | 值说明 |
---|
CurrentTime | Date | 服务器接收请求的时间,UTC 时间,格式必须为 ISO 8601,基本格式为 yyyy-MM-ddTHH:mmZ(UTC 时间)。 | 输入 ISO 8601 格式的日期。
例如设置条件为 CurrentTime 大于 2023-10-13T15:00:00Z ,则被授予流控策略的账号执行相应动作时,请求时间必须大于 2023-10-13T15:00:00Z,否则流控策略不会生效。 |
EpochTime | Numeric | 自 1970 年 1 月 1 日(UTC/GMT 午夜)来经过的秒数,不包括闰秒。 | 输入秒数。
例如设置条件为 EpochTime 大于 1697187692 ,则被授予流控策略的账号执行相应动作时,请求时间必须大于 1697187692,否则流控策略不会生效。 |
SourceIp | String | 请求发起的源 IP。 | 输入 IP 地址或者 IP 段,如有多个 IP 请以英文逗号分隔。
例如设置条件为 SourceIp 等于 192.168.0.1 ,则被授予流控策略的账号执行相应动作时,请求发起的源 IP 必须为 192.168.0.1,否则流控策略不会生效。 |
SourceVpc | String | 请求所在的 VPC。 | 输入 VPC ID。
例如设置条件为 SourceVpc 等于 vpc-2d****ez0n ,则被授予流控策略的账号执行相应动作时,请求所在的 VPC 必须是 vpc-2d****ez0n ,否则流控策略不会生效。 |
UserAgent | String | 请求的客户端代理程序。 | 输入 Agent 详细信息和通配符(*)。
例如设置条件为 UserAgent 等于 tos go sdk v2.6.0 ,则被授予流控策略的账号执行相应动作时,请求的客户端代理程序必须为 tos go sdk v2.6.0,否则流控策略不会生效。 |
Referer | String | 请求发起的链接。 | 输入 URL。
例如设置条件为 Referer 等于 http://console.volcengine.com ,则被授予流控策略的账号执行相应动作时,请求头必须为 http://console.volcengine.com ,否则流控策略不会生效。 |
AccessPoint | String | 请求访问的域名。 | 输入访问域名。
例如设置条件为 AccessPoint 等于 bucktename.tos-cn-beijing.volces.com ,则被授予流控策略的账号执行相应动作时,请求访问的域名必须为 bucktename.tos-cn-beijing.volces.com ,否则流控策略不会生效。 |
NetPlane | String | 请求来源的网络平面。 | 仅支持配置 public ,表示请求来源为公网。
例如设置条件为 NetPlane 等于 public ,则被授予流控策略的账号执行相应动作时,请求来源必须为公网,否则流控策略不会生效。 |
运算符说明
流控策略中不同的条件对应了不同的运算符,详细说明如下所示。
适用条件 | 运算符说明 |
---|
- UserAgent
- Referer
- SourceVPC
- AccessPoint
| - 等于:与设置的条件值完全匹配。
- 不等于:与设置的条件值不匹配。
- 等于(不区分大小写):忽略大小写后,与设置的条件值完全匹配。
- 不等于(不区分大小写):忽略大小写后,与设置的条件值不完全匹配。
- Like:支持通配符(*)的正则匹配,例如
like abc* ,就是以 abc 开头的所有字符,区分大小写。 - Not Like:支持通配符(*)的正则匹配,例如
Not like abc* ,就是除以 abc 开头的所有字符,区分大小写。
|
| - 等于:与设置的条件值相等。
- 不等于:与设置的条件值不相等。
- 小于:小于设置的条件值。
- 小于等于:小于等于设置的条件值。
- 大于:大于设置的条件值。
- 大于等于:大于等于设置的条件值。
|
| - 等于:与设置的条件值相等。
- 不等于:与设置的条件值不相等。
|
配置方法
流控策略支持两种配置方式,您可以参考以下内容,选择合适的配置方式: