Tablestore では、JSON 形式の権限ポリシーを使用してリソースのきめ細かなアクセス制御を行います。権限ポリシーは、アクション、リソース、コンディション の各要素を定義し、インスタンスポリシー、RAM ポリシー、およびコントロールポリシーに適用されます。
権限付与の構文
権限付与ポリシーは JSON で記述されており、バージョン番号 (Version) と 1 つ以上のステートメント (Statement) で構成されます。各ステートメントには、基本要素である Effect、Action、Resource、および Condition が含まれます。
構文構造
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:ActionName"],
"Resource": ["acs:ots:region:account-id:instance-and-resource-path"],
"Condition": {
"ConditionOperator": {
"ConditionKey": ["ConditionValue"]
}
}
}
]
}
フィールドの説明
|
フィールド |
説明 |
必須 |
|
Version |
認可ポリシーのバージョン番号。値は |
はい |
|
Statement |
権限付与の本体です。1 つ以上のステートメントを設定できます。 |
はい |
|
Effect |
認可の効果。有効な値は |
はい |
|
Action |
許可または拒否するアクションです。詳細については、「アクション」をご参照ください。 |
はい |
|
Resource |
権限を付与するリソースです。詳細については、「リソース」をご参照ください。 |
はい |
|
Condition |
権限付与が有効になる条件です。詳細については、「条件」をご参照ください。 |
いいえ |
アクション
アクションは、リソースに対して実行される操作を指定します。各アクションには、プレフィックスとして ots: を付ける必要があり、複数のアクションはコンマ (,) で区切られます。アクションでは、前方一致と後方一致の両方でアスタリスク (*) ワイルドカードを使用できます。一般的なアクションの定義:
単一の API オペレーション
"Action": "ots:GetRow"
複数の API オペレーション
"Action": [
"ots:PutRow",
"ots:GetRow"
]
すべての読み取り専用 API オペレーション
"Action": [
"ots:BatchGet*",
"ots:Describe*",
"ots:Get*",
"ots:List*",
"ots:Consume*",
"ots:Search",
"ots:ComputeSplitPointsBySize"
]
すべての読み取りと書き込みの API オペレーション
"Action": "ots:*"
すべての SQL API オペレーション
"Action": "ots:SQL*"
リソース
リソースは、プロダクト、リージョン、アカウント ID、インスタンス名、テーブル名などのフィールドで構成されます。リソースは、アクセス可能なリソースの範囲を指定します。各フィールドでは、プレフィックスとサフィックスの両方のマッチングに、アスタリスク (*) ワイルドカードを使用できます。リソース形式は次のとおりです。
acs:ots:[region]:[user_id]:instance/[instance_name]/table/[table_name]
製品は ots に固定されています。[region] はリソースが配置されているリージョンのリージョン ID (例: cn-hangzhou)、[user_id] は Alibaba Cloud アカウント ID、[instance_name] はインスタンス名、[table_name] はテーブル名です。これらの値を実際のリソースの値に置き換えます。
Tunnel の場合、リソース定義はインスタンスレベルでのみ指定可能で、製品、リージョン、アカウント ID、インスタンス名で構成されています。リソースの形式は次のとおりです:
acs:ots:[region]:[user_id]:instance/[instance_name]
使用上の注意
Tablestore のインスタンス名では、大文字と小文字は区別されません。リソース定義では、
[instance_name]を小文字で指定してください。Action と Resource は文字列マッチングによって検証され、アスタリスク (
*) ワイルドカードで前方一致と後方一致が区別されます。たとえば、Resource 定義のacs:ots:*:*:instance/abcはacs:ots:*:*:instance/abc/table/xyzとは一致しません。Tablestore コンソールでインスタンスリソースを管理するには、インスタンスリストを取得する必要があります。このため、ユーザーに
acs:ots:[region]:[user_id]:instance/*リソースに対する読み取り権限を付与してください。バッチオペレーション (BatchGetRow や BatchWriteRow など) の場合、Tablestore はアクセスされる各テーブルを個別に認可します。すべてのテーブルが認可された場合にのみ、オペレーションが実行されます。そうでない場合は、権限エラーが返されます。
代表的なリソース定義
-
すべてのリージョンにおけるすべてのアカウントのすべてのリソース。
"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*"
API タイプとリソース
Tablestore の API オペレーションは、インスタンス管理オペレーション、およびテーブルとデータの読み書き操作の 2 つのカテゴリに分類されます。各タイプのリソース設定は次のとおりです:
管理 API によってアクセスされるリソース
管理 API 操作は、主にインスタンス関連の操作であり、コンソールと OpenAPI の両方から呼び出されます。 以下でアクセスされるリソースは、acs:ots:[region]:[user_id]: プレフィックスを省略し、インスタンス部分のみを記述します。
|
API オペレーション |
アクション |
アクセスされるリソース |
|
CreateInstance |
|
instance/[instance_name] |
|
UpdateInstance |
|
instance/[instance_name] |
|
GetInstance |
|
instance/[instance_name] |
|
DeleteInstance |
|
instance/[instance_name] |
|
ListInstances |
|
instance/* |
|
ChangeResourceGroup |
|
instance/[instance_name] |
|
ListTagResources |
|
instance/* |
|
TagResources |
|
instance/[instance_name] |
|
UntagResources |
|
instance/[instance_name] |
|
UpdateInstancePolicy |
|
instance/[instance_name] |
|
DeleteInstancePolicy |
|
instance/[instance_name] |
|
CheckInstancePolicy |
|
instance/[instance_name] |
|
UpdateInstanceElasticVCUUpperLimit |
|
instance/[instance_name] |
データ API によってアクセスされるリソース
データ API 操作は、主にテーブル関連および行関連の操作であり、コンソールと SDK の両方から呼び出されます。これらの API 操作のアクションとリソースの定義は、コンソールのユーザーエクスペリエンスに影響します。以下でアクセスされるリソースは、acs:ots:[region]:[user_id]: プレフィックスを省略し、インスタンスとテーブルの部分のみを記述します。
|
API オペレーション |
アクション |
アクセスされるリソース |
|
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] |
|
CreateGlobalTable |
|
instance/[instance_name]/table/[table_name] |
|
DescribeGlobalTable |
|
instance/[instance_name]/table/[table_name] |
|
UpdateGlobalTable |
|
instance/[instance_name]/table/[table_name] |
|
BindGlobalTable |
|
instance/[instance_name]/table/[table_name] |
|
UnbindGlobalTable |
|
instance/[instance_name]/table/[table_name] |
|
AddDefinedColumn |
|
instance/[instance_name]/table/[table_name] |
|
DeleteDefinedColumn |
|
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] |
|
UpdateSearchIndex |
|
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] |
|
ComputeSplits |
|
instance/[instance_name]/table/[table_name] |
|
ParallelScan |
|
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] |
|
ConsumeTunnel |
|
instance/[instance_name]/table/[table_name] |
|
DescribeTunnel |
|
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] |
条件
条件は、承認が有効になるための制約を指定します。条件は、条件演算子、条件キー、および条件値で構成されます。
条件演算子
条件演算子は、条件キーと条件値を比較する方法を指定します。サポートされているタイプには、文字列 (String)、数値 (Number)、日時 (Date and time)、ブール値 (Boolean)、および IP アドレス (IP address) があります。条件演算子とその説明の完全なリストについては、「条件演算子」をご参照ください。
条件キー
次の表では、Tablestore がサポートするカスタム条件キーと共通条件キーについて説明します。
|
タイプ |
条件キー |
説明 |
|
Tablestore のカスタム条件 |
|
CreateTable API および UpdateTable API に適用されます。暗号化されたテーブルの作成または更新のみを許可するかどうかを指定します。 値の型は文字列です。有効な値は "true" と "false" です。 設定例: |
|
|
信頼できるプロキシからのアクセスのみを許可するかどうかを指定します。コンソールからのアクセスは、信頼できるプロキシを使用します。 値の型は文字列です。有効な値は "true" と "false" です。 設定例: |
|
|
|
CreateInstance API および UpdateInstance API に適用されます。インターネット経由でアクセスできないインスタンスの作成に限定するかどうかを指定します。 値の型は文字列です。有効な値は "true" と "false" です。 設定例: |
|
|
|
許可するクライアントの TLS バージョンを設定します。これにより、アクセスは HTTPS プロトコルのみに制限されます。 値の型は文字列です。有効な値は TLSv1、TLSv1.1、TLSv1.2、および TLSv1.3 です。 1 つの条件で複数の TLS バージョンをサポートします。複数の TLS バージョンが設定されている場合、クライアントは設定されているいずれかの TLS バージョンを使用して Tablestore にアクセスできます。 |
|
|
|
リクエスト元の AccessKey ID (AK) を制限します。 値の型は文字列です。複数の AccessKey ID を指定するには、1 行につき 1 つの AccessKey ID を入力します。 |
|
|
共通条件 |
|
アクセス元の IP アドレスまたは CIDR ブロックを制限します。 値の型は文字列です。有効な値は、IPv4 または IPv6 の IP アドレスおよび CIDR ブロックです。1 つの条件で複数の IP アドレスまたは CIDR ブロックをサポートします。 重要
インスタンスポリシーで |
|
|
ソース VPC を制限します。 値の型は文字列です。有効な値は、ソース VPC の ID と |
|
|
|
アクセスがセキュアトランスポート (HTTPS) を使用するかどうかを制限します。 値の型はブール値です。有効な値は次のとおりです。
|
|
|
|
リクエストが Tablestore サーバーに到着する時刻を制限します。 値の型は日時で、ISO 8601 形式です (例: |
|
|
|
アクセスで多要素認証 (MFA) を使用するかどうかを制限します。 値の型はブール値です。有効な値は true と false です。 |