自定義RAM Policy
本文為您介紹RAM Policy中Action、Resource和Condition的定義以及應(yīng)用場景。
Action定義
Action是API的名稱,您可以根據(jù)Action設(shè)置開放或限制用戶能訪問的API。
在創(chuàng)建表格存儲的授權(quán)策略時,每個Action都需要添加ots:
前綴,多個Action以半角逗號(,)分隔,并且支持使用星號(*)通配符(包括前綴匹配和后綴匹配)。
典型的Action定義如下:
單個API
"Action": "ots:GetRow"
多個API
"Action": [
"ots:PutRow",
"ots:GetRow"
]
所有只讀API
{
"Version": "1",
"Statement": [
{
"Action": [
"ots:BatchGet*",
"ots:Describe*",
"ots:Get*",
"ots:List*",
"ots:Consume*",
"ots:Search",
"ots:ComputeSplitPointsBySize"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
所有讀寫API
"Action": "ots:*"
所有SQL操作API
"Action": "ots:SQL*"
Resource定義
表格存儲的資源由產(chǎn)品、地域、用戶ID、實例名和表名多個字段組成。每個字段均支持星號(*)通配符(包括前綴匹配和后綴匹配)。Resource格式如下:
acs:ots:[region]:[user_id]:instance/[instance_name]/table/[table_name]
其中產(chǎn)品固定取值為ots,[region]
取值為資源所在地域的RegionID(例如cn-hangzhou),[user_id]
取值為阿里云賬號ID,[instance_name]
取值為表格存儲實例名稱,[table_name]
取值為表格存儲表名稱,請根據(jù)實際配置。
表格存儲中實例名稱不區(qū)分大小寫,在Resource資源定義中的[instance_name]請用小寫表示。
Tunnel涉及的Resource定義只能到實例級別,即Tunnel的資源由產(chǎn)品、地域、用戶ID和實例名組成。Resource格式如下:
acs:ots:[region]:[user_id]:instance/[instance_name]
典型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*"
所有以abc結(jié)尾的Instance及其下的所有以xyz結(jié)尾的表
"Resource": [ "acs:ots:*:*:instance/*abc", "acs:ots:*:*:instance/*abc/table/*xyz" ]
注意事項
RAM Policy中Action和Resource通過字符串匹配進行驗證,并且通配符星號(*)區(qū)分前綴和后綴匹配。如果Resource定義為
acs:ots:*:*:instance/*/
,則無法匹配acs:ots:*:*:instance/abc
。如果Resource定義為acs:ots:*:*:instance/abc
,則無法匹配acs:ots:*:*:instance/abc/table/xyz
。當(dāng)?shù)卿?span id="155cf911775lv" outputclass="productName" data-tag="ph" data-ref-searchable="yes" data-reuse-tag="productName" data-type="productName" data-product-code="ots" docid="3761048" data-source="reuse_library" class="ph productName">表格存儲控制臺管理實例資源時,由于表格存儲控制臺需要獲取實例的列表,因此需要授予用戶
acs:ots:[region]:[user_id]:instance/*
資源的讀取權(quán)限,對于批量操作API(例如BatchGetRow、BatchWriteRow),后端服務(wù)會對被訪問的每張表分別鑒權(quán),只有所有表都通過鑒權(quán)才能執(zhí)行操作,否則會返回權(quán)限錯誤。
表格存儲的API類型
目前表格存儲包含實例管理類API、表和數(shù)據(jù)讀寫類API以及實時通道管理和讀寫類API。不同類型API訪問的資源的配置信息如下:
管理類API訪問的資源
管理類API主要為實例相關(guān)的操作,僅由控制臺調(diào)用。對該類API的Action和Resource定義,將影響用戶使用控制臺。以下訪問的資源省略了acs:ots:[region]:[user_id]:
前綴,只描述實例和表部分。
API名稱/Action | 訪問的資源 |
ListInstance | instance/* |
InsertInstance | instance/[instance_name] |
GetInstance | instance/[instance_name] |
DeleteInstance | instance/[instance_name] |
數(shù)據(jù)類API訪問的資源
數(shù)據(jù)類API主要為表和行相關(guān)的操作,控制臺和SDK都會調(diào)用,對該類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] |
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] |
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] |
CreateTunnel | instance/[instance_name]/table/[table_name] |
DeleteTunnel | instance/[instance_name]/table/[table_name] |
ListTunnel | instance/[instance_name]/table/[table_name] |
DescribeTunnel | instance/[instance_name]/table/[table_name] |
ConsumeTunnel | 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] |
Tunnel API訪問的資源
Tunnel API主要為通道相關(guān)的操作,控制臺和SDK都會調(diào)用,對該類API的Action和Resource定義,將影響用戶使用控制臺。以下訪問的資源省略了acs:ots:[region]:[user_id]:
前綴,只描述實例和表部分。
API名稱/Action | 訪問的資源 |
ListTable | instance/[instance_name] |
CreateTable | instance/[instance_name] |
UpdateTable | instance/[instance_name] |
DescribeTable | instance/[instance_name] |
DeleteTable | instance/[instance_name] |
GetRow | instance/[instance_name] |
PutRow | instance/[instance_name] |
UpdateRow | instance/[instance_name] |
DeleteRow | instance/[instance_name] |
GetRange | instance/[instance_name] |
BatchGetRow | instance/[instance_name] |
BatchWriteRow | instance/[instance_name] |
ComputeSplitPointsBySize | instance/[instance_name] |
StartLocalTransaction | instance/[instance_name] |
CommitTransaction | instance/[instance_name] |
AbortTransaction | instance/[instance_name] |
CreateIndex | instance/[instance_name] |
DropIndex | instance/[instance_name] |
CreateSearchIndex | instance/[instance_name] |
DeleteSearchIndex | instance/[instance_name] |
ListSearchIndex | instance/[instance_name] |
DescribeSearchIndex | instance/[instance_name] |
Search | instance/[instance_name] |
CreateTunnel | instance/[instance_name] |
DeleteTunnel | instance/[instance_name] |
ListTunnel | instance/[instance_name] |
DescribeTunnel | instance/[instance_name] |
ConsumeTunnel | instance/[instance_name] |
Condition定義
目前表格存儲支持的Policy包括訪問IP限制、是否通過HTTPS訪問、是否通過MFA(多因素認證)訪問、是否通過TLSv1.2和TLSv1.3版本訪問、訪問時間限制等多種鑒權(quán)條件。
訪問IP限制
通過自定義權(quán)限策略限制訪問表格存儲的源IP地址,并且支持根據(jù)網(wǎng)段進行過濾。典型配置如下:
限制多個IP地址。
以下示例用于只允許IP地址為10.10.XX.XX和10.11.XX.XX的請求訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": "acs:ots:*:*:*", "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX", "10.11.XX.XX" ] } } } ], "Version": "1" }
限制單個IP地址和IP網(wǎng)段。
以下示例用于只允許IP地址為10.10.XX.XX或10.10.XX.XX/24網(wǎng)段的請求訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": "acs:ots:*:*:*", "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX", "10.10.XX.XX/24" ] } } } ], "Version": "1" }
HTTPS訪問限制
通過自定義權(quán)限策略限制是否通過HTTPS訪問表格存儲。
以下示例用于限制請求必須通過HTTPS訪問表格存儲。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
],
"Version": "1"
}
TLS版本訪問限制
通過自定義權(quán)限策略限制是否通過TLSv1.2和TLSv1.3版本訪問表格存儲。
以下示例用于限制請求必須通過TLSv1.2和TLSv1.3版本訪問表格存儲。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ots:*",
],
"Resource": [
"*"
],
"Condition": {
"StringNotEquals": {
"ots:TLSVersion": [
"TLSv1.2",
"TLSv1.3"
]
}
}
}
]
}
MFA訪問限制
通過自定義權(quán)限策略限制是否通過MFA(多因素認證)訪問表格存儲。
以下示例用于限制請求必須通過MFA訪問表格存儲。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:MFAPresent ": "true"
}
}
}
],
"Version": "1"
}
訪問時間限制
通過自定義權(quán)限策略限制請求的訪問時間,即只允許或拒絕在某個時間點范圍之前的請求。
以下示例用于限制用戶在北京時間2016年1月1日零點之前可以訪問表格存儲,之后將不能再訪問。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"DateLessThan": {
"acs:CurrentTime": "2016-01-01T00:00:00+08:00"
}
}
}
],
"Version": "1"
}
典型使用場景
結(jié)合對Action、Resource和Condition的定義介紹典型場景的Policy定義和授權(quán)方法。
場景一:多種授權(quán)條件
對于訪問IP地址為10.10.XX.XX/24
網(wǎng)段的用戶,可以對所有名稱為online-01和online-02的實例執(zhí)行讀或者寫操作(包括實例下的所有表),且要求只能在2016-01-01 00:00:00
之前訪問和通過HTTPS訪問。
使用阿里云賬號登錄訪問控制RAM管理控制臺(默認已開通訪問控制服務(wù))。
創(chuàng)建權(quán)限策略。
在左側(cè)導(dǎo)航欄,選擇
。在權(quán)限策略頁面,單擊創(chuàng)建權(quán)限策略。
在創(chuàng)建權(quán)限策略頁面,單擊腳本編輯頁簽,并將如下內(nèi)容填寫到策略內(nèi)容中。
{ "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": [ "acs:ots:*:*:instance/online-01", "acs:ots:*:*:instance/online-01/table*", "acs:ots:*:*:instance/online-02", "acs:ots:*:*:instance/online-02/table*" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX/24" ] }, "DateLessThan": { "acs:CurrentTime": "2016-01-01T00:00:00+08:00" }, "Bool": { "acs:SecureTransport": "true" } } } ], "Version": "1" }
單擊繼續(xù)編輯基本信息,輸入策略名稱和備注。
單擊確定。
為RAM用戶授予權(quán)限策略。
在左側(cè)導(dǎo)航欄,選擇
。在用戶頁面,找到需要授權(quán)的RAM用戶,單擊用戶操作列的添加權(quán)限。
在新增授權(quán)面板,選擇權(quán)限為自定義策略后,搜索已新建的策略名稱,并選中該策略前的復(fù)選框?qū)⒉呗蕴砑拥?b data-tag="uicontrol" id="b9c5baeb1fscj" class="uicontrol">已選擇授權(quán)策略欄。
單擊確認新增授權(quán)。
單擊關(guān)閉。
場景二:拒絕請求
對于訪問IP地址為10.10.XX.XX的用戶,拒絕對華北2(北京)地域名稱以online和product開頭的實例下的所有表執(zhí)行寫操作(不包括對實例的操作)。
使用阿里云賬號登錄訪問控制RAM管理控制臺(默認已開通訪問控制服務(wù))。
創(chuàng)建權(quán)限策略。
在左側(cè)導(dǎo)航欄,選擇
。在權(quán)限策略頁面,單擊創(chuàng)建權(quán)限策略。
在創(chuàng)建權(quán)限策略頁面,單擊腳本編輯頁簽,并將如下內(nèi)容填寫到策略內(nèi)容中。
{ "Statement": [ { "Effect": "Deny", "Action": [ "ots:Create*", "ots:Insert*", "ots:Put*", "ots:Update*", "ots:Delete*", "ots:BatchWrite*" ], "Resource": [ "acs:ots:cn-beijing:*:instance/online*/table*", "acs:ots:cn-beijing:*:instance/product*/table*" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX" ] } } } ], "Version": "1" }
單擊繼續(xù)編輯基本信息,輸入策略名稱和備注。
單擊確定。
為RAM用戶授予權(quán)限策略。
在左側(cè)導(dǎo)航欄,選擇
。在用戶頁面,找到需要授權(quán)的RAM用戶,單擊用戶操作列的添加權(quán)限。
在新增授權(quán)面板,選擇權(quán)限為自定義策略后,搜索已新建的策略名稱,并選中該策略前的復(fù)選框?qū)⒉呗蕴砑拥?b data-tag="uicontrol" id="a3ecf13f29va0" class="uicontrol">已選擇授權(quán)策略欄。
單擊確認新增授權(quán)。
單擊關(guān)閉。