このトピックでは、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 経由でのみ許可されます。
RAM コンソール にログオンします。RAM サービスをアクティブ化する必要があることに注意してください。
カスタムポリシーを作成します。
左側のナビゲーションペインで、
を選択します。ポリシーページで、ポリシーの作成をクリックします。
ポリシーの作成ページで、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" }
ポリシー情報編集に進むをクリックします。基本情報セクションで、ポリシーの名前と説明を入力します。
OK をクリックします。
ポリシーを RAM ユーザーにアタッチします。
左側のナビゲーションペインで、
を選択します。ユーザーページで、ポリシーをアタッチする RAM ユーザーを見つけます。アクション列で、権限の追加をクリックします。
権限の付与パネルで、カスタムポリシーを選択し、作成したポリシーの名前を検索して、ポリシーの横にあるチェックボックスをオンにして 選択済みポリシー列に追加します。
権限の付与をクリックします。
閉じるをクリックします。
シナリオ 2: リクエストの拒否
このシナリオでは、IP アドレス 10.10.XX.XX を使用する RAM ユーザーは、中国 (北京) リージョンで名前に online または product 接頭辞が含まれるインスタンスに属するテーブルにデータを書き込むことができません。このポリシーは、インスタンスに対する操作には有効ではありません。
RAM コンソール にログオンします。RAM サービスをアクティブ化する必要があることに注意してください。
カスタムポリシーを作成します。
左側のナビゲーションペインで、
を選択します。ポリシーページで、ポリシーの作成をクリックします。
ポリシーの作成ページで、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" }
ポリシー情報編集に進むをクリックします。基本情報セクションで、ポリシーの名前と説明を入力します。
OK をクリックします。
ポリシーを RAM ユーザーにアタッチします。
左側のナビゲーションペインで、
を選択します。ユーザーページで、ポリシーをアタッチする RAM ユーザーを見つけます。アクション列で、権限の追加をクリックします。
権限の付与パネルで、カスタムポリシーを選択し、作成したポリシーの名前を検索して、ポリシーの横にあるチェックボックスをオンにして 選択済みポリシー列に追加します。
権限の付与をクリックします。
閉じるをクリックします。