すべてのプロダクト
Search
ドキュメントセンター

Tablestore:カスタムポリシーの作成

最終更新日:Dec 28, 2024

このトピックでは、Resource Access Management (RAM) ポリシーの Action、Resource、および Condition 要素と、RAM ポリシーが適しているシナリオについて説明します。

Action

Action 要素は、1 つ以上の API 操作を指定します。Action 要素を指定して、API 操作へのユーザーアクセスを許可または拒否できます。

Tablestore のポリシーを作成する場合は、各アクションに 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 の Resource 要素は、service、region、user_id、instance_name、table_name など、複数のフィールドで構成されます。各フィールドは、接頭辞と接尾辞のマッチングにアスタリスク (*) ワイルドカード文字をサポートしています。Resource 要素を使用して、他のユーザーがアクセスできる Tablestore リソースを指定できます。Resource 要素は次の形式で指定します。

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

service フィールドの値を ots に設定する必要があります。region フィールドは、リソースが存在するリージョンの ID (cn-hangzhou など) を指定します。user_id フィールドは、Alibaba Cloud アカウントの ID を指定します。instance_name フィールドは、Tablestore インスタンスの名前を指定します。table_name フィールドは、Tablestore テーブルの名前を指定します。ビジネス要件に基づいて上記のフィールドを設定してください。

説明

Tablestore インスタンスの名前は大文字と小文字を区別しません。Resource 要素の instance_name フィールドの値は小文字で指定することをお勧めします。

Tunnel Service の Resource 要素は、テーブルではなくインスタンスによって定義され、service、region、user_id、instance_name などのフィールドが含まれます。Resource 要素は次の形式で指定します。

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

一般的なリソース定義

  • すべてのリージョンにおけるすべての Alibaba Cloud アカウントのすべてのリソース

    "Resource": "acs:ots:*:*:*"                    
  • 中国 (杭州) リージョンにおけるユーザー 123456 のすべてのインスタンスとそのテーブル

    "Resource": "acs:ots:cn-hangzhou:123456:instance*"                  
  • 中国 (杭州) リージョンにおけるユーザー 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 接尾辞が含まれるすべてのインスタンスと、名前に xyz 接尾辞が含まれるそのテーブル

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

使用上の注意

  • RAM ポリシーの Action 要素と Resource 要素は、文字列マッチング操作を実行することで検証されます。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/* リソースに対する読み取り権限をユーザーに付与する必要があります。

  • BatchGetRow や BatchWriteRow などの API 操作を呼び出すことによって、複数のテーブルに対して同時に操作を実行する場合、バックエンドサービスは各テーブルを個別に認証します。すべてのテーブルが認証に合格した場合にのみ、複数のテーブルに対して同時に操作を実行できます。そうでない場合は、権限エラーが返されます。

Tablestore API 操作

Tablestore は、インスタンス管理操作、テーブル操作、データの読み取り/書き込み操作、Tunnel Service の操作など、以下のタイプの API 操作を提供します。次の表では、API 操作のリソースを設定する方法について説明します。

インスタンス管理操作

インスタンス管理操作はインスタンス関連の操作であり、Tablestore コンソールでのみ呼び出すことができます。インスタンス管理操作の Action 要素と Resource 要素を指定すると、Tablestore コンソールでいくつかの機能が使用できなくなる場合があります。次のリソースの名前からは、acs:ots:[region]:[user_id]: 接頭辞が省略されています。インスタンスとテーブルについてのみ説明します。

API 操作/Action

リソース

ListInstance

instance/*

InsertInstance

instance/[instance_name]

GetInstance

instance/[instance_name]

DeleteInstance

instance/[instance_name]

テーブル操作とデータの読み取り/書き込み操作

テーブル操作とデータの読み取り/書き込み操作は、テーブルと行に対して実行され、Tablestore コンソールまたは Tablestore SDK を使用して呼び出すことができます。テーブル操作とデータの読み取り/書き込み操作の Action 要素と Resource 要素を指定すると、Tablestore コンソールでいくつかの機能が使用できなくなる場合があります。次のリソースの名前からは、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 Service の操作

Tunnel Service の操作はトンネル関連の操作であり、Tablestore コンソールまたは Tablestore SDK を使用して呼び出すことができます。Tunnel Service の操作の Action 要素と Resource 要素を指定すると、Tablestore コンソールでいくつかの機能が使用できなくなる場合があります。次のリソースの名前からは、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

Tablestore のポリシーは、IP アドレスベースのアクセス制御、HTTPS ベースのアクセス制御、多要素認証 (MFA) ベースのアクセス制御、TLS バージョンベースのアクセス制御、および時間ベースのアクセス制御をサポートしています。

IP アドレスベースのアクセス制御

Tablestore リソースへのアクセスを許可される IP アドレスまたは CIDR ブロックを指定するために、IP アドレスホワイトリストを作成できます。IP アドレスベースのアクセス制御は、次のシナリオに適しています。

  • 複数の IP アドレスからのアクセスを許可する

    次のサンプルコードは、IP アドレス 10.10.XX.XX と 10.11.XX.XX からの Tablestore リソースへのアクセスリクエストのみを許可する方法の例を示しています。

    {
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:*",
            "Condition": {
                "IpAddress": {
                    "acs:SourceIp": [
                        "10.10.XX.XX",
                        "10.11.XX.XX"
                    ]
                }
            }
        }
    ],
    "Version": "1"
    }                           
  • 1 つの IP アドレスまたは CIDR ブロックからのアクセスのみを許可する

    次のサンプルコードは、IP アドレス 10.10.XX.XX または CIDR ブロック 10.10.XX.XX/24 からの Tablestore リソースへのアクセスリクエストのみを許可する方法の例を示しています。

    {
    "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 バージョンベースのアクセス制御

TLS V1.2 または TLS V1.3 経由で送信されたリクエストのみが Tablestore リソースにアクセスできるように、カスタムポリシーを作成できます。

次のサンプルコードは、TLS V1.2 または TLS V1.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 日 00:00 (UTC+8) より前にのみユーザーが 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 要素の定義に基づいて、一般的なシナリオにおける特定のポリシーと認証方法について説明します。たとえば、IP アドレスホワイトリストを設定したり、特定のリージョンにおける特定のリソースへのアクセスを拒否または許可したり、アクセス時間と方法を指定したりできます。

シナリオ 1: 複数のアクセス制御条件

このシナリオでは、10.10.XX.XX/24 CIDR ブロックを使用する RAM ユーザーは、online-01 および online-02 という名前のインスタンスと、インスタンス内のすべてのテーブル (テーブルからのデータの読み取りとテーブルへのデータの書き込みを含む) を管理できます。アクセスは、2016 年 1 月 1 日 00:00:00 より前に HTTPS 経由でのみ許可されます。

  1. RAM コンソール にログオンします。RAM サービスをアクティブ化する必要があることに注意してください。

  2. カスタムポリシーを作成します。

    1. 左側のナビゲーションペインで、権限 > ポリシー を選択します。

    2. ポリシーページで、ポリシーの作成をクリックします。

    3. ポリシーの作成ページで、JSON タブをクリックします。JSON タブで、ポリシードキュメントに次のコードを入力します。

      {
      "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. OK をクリックします。

  3. ポリシーを RAM ユーザーにアタッチします。

    1. 左側のナビゲーションペインで、ID > ユーザー を選択します。

    2. ユーザーページで、ポリシーをアタッチする RAM ユーザーを見つけます。アクション列で、権限の追加をクリックします。

    3. 権限の付与パネルで、カスタムポリシーを選択し、作成したポリシーの名前を検索して、ポリシーの横にあるチェックボックスをオンにして 選択済みポリシー列に追加します。

    4. 権限の付与をクリックします。

    5. 閉じるをクリックします。

シナリオ 2: リクエストの拒否

このシナリオでは、IP アドレス 10.10.XX.XX を使用する RAM ユーザーは、中国 (北京) リージョンで名前に online または product 接頭辞が含まれるインスタンスに属するテーブルにデータを書き込むことができません。このポリシーは、インスタンスに対する操作には有効ではありません。

  1. RAM コンソール にログオンします。RAM サービスをアクティブ化する必要があることに注意してください。

  2. カスタムポリシーを作成します。

    1. 左側のナビゲーションペインで、権限 > ポリシー を選択します。

    2. ポリシーページで、ポリシーの作成をクリックします。

    3. ポリシーの作成ページで、JSON タブをクリックします。JSON タブで、ポリシードキュメントに次のコードを入力します。

      {
          "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. OK をクリックします。

  3. ポリシーを RAM ユーザーにアタッチします。

    1. 左側のナビゲーションペインで、ID > ユーザー を選択します。

    2. ユーザーページで、ポリシーをアタッチする RAM ユーザーを見つけます。アクション列で、権限の追加をクリックします。

    3. 権限の付与パネルで、カスタムポリシーを選択し、作成したポリシーの名前を検索して、ポリシーの横にあるチェックボックスをオンにして 選択済みポリシー列に追加します。

    4. 権限の付与をクリックします。

    5. 閉じるをクリックします。