全部產品
Search
文件中心

Tablestore:自訂RAM Policy

更新時間:Nov 21, 2024

本文為您介紹RAM Policy中Action、Resource和Condition的定義以及應用情境。

Action定義

Action是API的名稱,您可以根據Action設定開放或限制使用者能訪問的API。

在建立Tablestore的授權策略時,每個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定義

Tablestore的資源由產品、地區、使用者ID、執行個體名和表名多個欄位組成,您可以根據Resource配置使用者能訪問的Table Store資源。每個欄位均支援星號(*)萬用字元(包括首碼匹配和尾碼匹配)。Resource格式如下:

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

其中產品固定取值為ots,[region]取值為資源所在地區的RegionID(例如cn-hangzhou),[user_id]取值為阿里雲帳號ID,[instance_name]取值為Tablestore執行個體名稱,[table_name]取值為Tablestore表名稱,請根據實際配置。

說明

Tablestore中執行個體名稱不區分大小寫,在Resource資源定義中的[instance_name]請用小寫表示。

Tunnel涉及的Resource定義只能到執行個體層級,即Tunnel的資源由產品、地區、使用者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結尾的Instance及其下的所有以xyz結尾的表

    "Resource": [
    "acs:ots:*:*:instance/*abc",
    "acs:ots:*:*:instance/*abc/table/*xyz"
    ]                   

注意事項

  • RAM Policy中Action和Resource通過字串匹配進行驗證,並且萬用字元星號(*)區分首碼和尾碼匹配。如果Resource定義為acs:ots:*:*:instance/*/,則無法匹配acs:ots:*:*:instance/abc。如果Resource定義為 acs:ots:*:*:instance/abc,則無法匹配acs:ots:*:*:instance/abc/table/xyz

  • 當登入Tablestore控制台管理執行個體資源時,由於Tablestore控制台需要擷取執行個體的列表,因此需要授予使用者acs:ots:[region]:[user_id]:instance/*資源的讀取許可權,

  • 對於大量操作API(例如BatchGetRow、BatchWriteRow),後端服務會對被訪問的每張表分別鑒權,只有所有表都通過鑒權才能執行操作,否則會返回許可權錯誤。

Tablestore的API類型

目前Tablestore包含執行個體管理類API、表和資料讀寫類API以及即時通道管理和讀寫類API。不同類型API訪問的資源的配置資訊如下:

管理類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]

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主要為通道相關的操作,控制台和SDK都會調用,對該類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定義

您可以根據Condition配置使用者能訪問的情境策略,目前Tablestore支援的Policy包括訪問IP限制、是否通過HTTPS訪問、是否通過MFA(多因素認證)訪問、是否通過TLSv1.2和TLSv1.3版本訪問、訪問時間限制等多種鑒權條件。

訪問IP限制

通過配置IP白名單限制訪問Tablestore的源IP地址,並且支援根據網段進行過濾。典型配置如下:

  • 限制多個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網段。

    以下樣本用於只允許IP地址為10.10.XX.XX或10.10.XX.XX/24網段的請求訪問。

    {
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:*",
            "Condition": {
                "IpAddress": {
                    "acs:SourceIp": [
                        "10.10.XX.XX",
                        "10.10.XX.XX/24"
                    ]
                }
            }
        }
    ],
    "Version": "1"
    }                            

HTTPS訪問限制

通過自訂權限原則限制是否通過HTTPS訪問Tablestore

以下樣本用於限制請求必須通過HTTPS訪問Tablestore

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:*",
            "Condition": {
                "Bool": {
                    "acs:SecureTransport": "true"
                }
            }
        }
    ],
    "Version": "1"
}                    

TLS版本訪問限制

通過自訂權限原則限制是否通過TLSv1.2和TLSv1.3版本訪問Tablestore

以下樣本用於限制請求必須通過TLSv1.2和TLSv1.3版本訪問Tablestore

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "ots:*",
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringNotEquals": {
                  "ots:TLSVersion": [
                    "TLSv1.2",
                    "TLSv1.3"
                  ]
                }
            }
        }
    ]
}

MFA訪問限制

通過自訂權限原則限制是否通過MFA(多因素認證)訪問Tablestore

以下樣本用於限制請求必須通過MFA訪問Tablestore

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:*",
            "Condition": {
                "Bool": {
                    "acs:MFAPresent ": "true"
                }
            }
        }
    ],
    "Version": "1"
}                    

訪問時間限制

通過自訂權限原則限制請求的訪問時間,即只允許或拒絕在某個時間點範圍之前的請求。

以下樣本用於限制使用者在北京時間2016年1月1日零點之前可以訪問Tablestore,之後將不能再訪問。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:*",
            "Condition": {
                "DateLessThan": {
                    "acs:CurrentTime": "2016-01-01T00:00:00+08:00"
                }
            }
        }
    ],
    "Version": "1"
}                    

典型使用情境

結合對Action、Resource和Condition的定義介紹典型情境的Policy定義和授權方法,例如配置IP訪問白名單、地區和資源存取權限、訪問時間段和訪問方式等。

情境一:多種授權條件

對於訪問IP地址為10.10.XX.XX/24網段的使用者,可以對所有名稱為online-01和online-02的執行個體執行讀或者寫操作(包括執行個體下的所有表),且要求只能在2016-01-01 00:00:00之前訪問和通過HTTPS訪問。

  1. 使用阿里雲帳號登入存取控制Resource Access Management控制台(預設已開通存取控制服務)。

  2. 建立權限原則。

    1. 在左側導覽列,選擇許可權管理 > 權限原則

    2. 權限原則頁面,單擊建立權限原則

    3. 建立權限原則頁面,單擊指令碼編輯頁簽,並將如下內容填寫到策略內容中。

      {
      "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"
      }                            
    4. 單擊繼續編輯基本資料,輸入策略名稱稱和備忘。

    5. 單擊確定

  3. 為RAM使用者授予權限原則。

    1. 在左側導覽列,選擇身份管理 > 使用者

    2. 使用者頁面,找到需要授權的RAM使用者,單擊使用者操作列的添加許可權

    3. 新增授權面板,選擇許可權為自訂策略後,搜尋已建立的策略名稱稱,並選中該策略前的複選框將策略添加到已選擇授權策略欄。

    4. 單擊確認新增授權

    5. 單擊關閉

情境二:拒絕請求

對於訪問IP地址為10.10.XX.XX的使用者,拒絕對華北2(北京)地區名稱以online和product開頭的執行個體下的所有表執行寫操作(不包括對執行個體的操作)。

  1. 使用阿里雲帳號登入存取控制Resource Access Management控制台(預設已開通存取控制服務)。

  2. 建立權限原則。

    1. 在左側導覽列,選擇許可權管理 > 權限原則

    2. 權限原則頁面,單擊建立權限原則

    3. 建立權限原則頁面,單擊指令碼編輯頁簽,並將如下內容填寫到策略內容中。

      {
          "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"
      }                 
    4. 單擊繼續編輯基本資料,輸入策略名稱稱和備忘。

    5. 單擊確定

  3. 為RAM使用者授予權限原則。

    1. 在左側導覽列,選擇身份管理 > 使用者

    2. 使用者頁面,找到需要授權的RAM使用者,單擊使用者操作列的添加許可權

    3. 新增授權面板,選擇許可權為自訂策略後,搜尋已建立的策略名稱稱,並選中該策略前的複選框將策略添加到已選擇授權策略欄。

    4. 單擊確認新增授權

    5. 單擊關閉