このトピックでは、Resource Access Management (RAM) ポリシーの Action、Resource、Condition 要素と、これらのポリシーが適用されるシナリオについて説明します。
Action の定義
Action 要素は、1 つ以上の API 操作を指定します。この要素を使用して、ユーザーによるこれらの操作へのアクセスを許可または拒否できます。
Tablestore の権限付与ポリシーを作成する場合、各アクションの前に ots: を付け、複数のアクションをコンマで区切り、アスタリスク (*) ワイルドカード文字を使用してプレフィックスまたはサフィックスマッチングを行います。
一般的な 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 フィールドが含まれます。この要素を使用して、他のユーザーがアクセスできる 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 インスタンス名では大文字と小文字が区別されません。instance_name フィールドの値は小文字で指定することを推奨します。
トンネルサービスの Resource 要素は、テーブルレベルではなくインスタンスレベルで定義され、service、region、user_id、instance_name フィールドが含まれます。Resource 要素は次のフォーマットで指定します。
acs:ots:[region]:[user_id]:instance/[instance_name] Resource 定義の例
すべてのリージョンのすべてのユーザーのすべてのリソース
"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 要素は、文字列マッチングによって検証されます。これらの要素を指定する際には、アスタリスク (*) ワイルドカード文字を使用してプレフィックスまたはサフィックスマッチングを行うことができます。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 は、インスタンス管理操作、テーブル操作、データ読み取り/書き込み操作、およびトンネルサービス操作を提供します。次の表では、各タイプの操作でリソースを構成する方法について説明します。
管理 API のアクセス可能なリソース
管理 API はインスタンスレベルの操作を処理し、コンソールまたは OpenAPI を使用して呼び出されます。以下で説明するリソースから acs:ots:[region]:[user_id]: プレフィックスは省略されています。インスタンスのみが指定されます。
API 名 | Action | アクセスされるリソース |
CreateInstance | ots:InsertInstance | instance/[instance_name] |
UpdateInstance | ots:UpdateInstance | instance/[instance_name] |
GetInstance | ots:GetInstance | instance/[instance_name] |
DeleteInstance | ots:DeleteInstance | instance/[instance_name] |
ListInstances | ots:ListInstance | instance/* |
ChangeResourceGroup | ots:UpdateInstance | instance/[instance_name] |
ListTagResources | ots:ListTagResourcesCustomTags | instance/* |
TagResources | ots:TagResourcesCustomTags | instance/[instance_name] |
UntagResources | ots:UntagResourcesCustomTags | instance/[instance_name] |
UpdateInstancePolicy | ots:UpdateInstancePolicy | instance/[instance_name] |
DeleteInstancePolicy | ots:DeleteInstancePolicy | instance/[instance_name] |
CheckInstancePolicy | ots:CheckInstancePolicy | instance/[instance_name] |
UpdateInstanceElasticVCUUpperLimit | ots:UpdateInstanceElasticVCUUpperLimit | instance/[instance_name] |
データ API によってアクセスされるリソース
テーブル操作とデータ読み取り/書き込み操作は、テーブルと行に対して機能し、Tablestore コンソールまたは Tablestore SDK を使用して呼び出すことができます。これらの操作に対して Action 要素と Resource 要素を指定すると、Tablestore コンソールで一部の機能が利用できなくなる場合があります。以下で説明するリソース名から acs:ots:[region]:[user_id]: プレフィックスは省略されています。インスタンスとテーブルのみが指定されます。
API 名 | Action | アクセスされるリソース |
ListTable | ots:ListTable | instance/[instance_name]/table* |
CreateTable | ots:CreateTable | instance/[instance_name]/table/[table_name] |
UpdateTable | ots:UpdateTable | instance/[instance_name]/table/[table_name] |
DescribeTable | ots:DescribeTable | instance/[instance_name]/table/[table_name] |
DeleteTable | ots:DeleteTable | instance/[instance_name]/table/[table_name] |
CreateGlobalTable |
| instance/[instance_name]/table/[table_name] |
DescribeGlobalTable | ots: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 | ots:AddDefinedColumn | instance/[instance_name]/table/[table_name] |
DeleteDefinedColumn | ots:DeleteDefinedColumn | instance/[instance_name]/table/[table_name] |
GetRow | ots:GetRow | instance/[instance_name]/table/[table_name] |
PutRow | ots:PutRow | instance/[instance_name]/table/[table_name] |
UpdateRow | ots:UpdateRow | instance/[instance_name]/table/[table_name] |
DeleteRow | ots:DeleteRow | instance/[instance_name]/table/[table_name] |
GetRange | ots:GetRange | instance/[instance_name]/table/[table_name] |
BatchGetRow | ots:BatchGetRow | instance/[instance_name]/table/[table_name] |
BatchWriteRow | ots:BatchWriteRow | instance/[instance_name]/table/[table_name] |
ComputeSplitPointsBySize | ots:ComputeSplitPointsBySize | instance/[instance_name]/table/[table_name] |
StartLocalTransaction | ots:StartLocalTransaction | instance/[instance_name]/table/[table_name] |
CommitTransaction | ots:CommitTransaction | instance/[instance_name]/table/[table_name] |
AbortTransaction | ots:AbortTransaction | instance/[instance_name]/table/[table_name] |
CreateIndex | ots:CreateIndex | instance/[instance_name]/table/[table_name] |
DropIndex | ots:DropIndex | instance/[instance_name]/table/[table_name] |
CreateSearchIndex | ots:CreateSearchIndex | instance/[instance_name]/table/[table_name] |
UpdateSearchIndex | ots:UpdateSearchIndex | instance/[instance_name]/table/[table_name] |
DeleteSearchIndex | ots:DeleteSearchIndex | instance/[instance_name]/table/[table_name] |
ListSearchIndex | ots:ListSearchIndex | instance/[instance_name]/table/[table_name] |
DescribeSearchIndex | ots:DescribeSearchIndex | instance/[instance_name]/table/[table_name] |
Search | ots:Search | instance/[instance_name]/table/[table_name] |
ComputeSplits | ots:ComputeSplits | instance/[instance_name]/table/[table_name] |
ParallelScan | ots:ParallelScan | instance/[instance_name]/table/[table_name] |
CreateTunnel | ots:CreateTunnel | instance/[instance_name]/table/[table_name] |
DeleteTunnel | ots:DeleteTunnel | instance/[instance_name]/table/[table_name] |
ListTunnel | ots:ListTunnel | instance/[instance_name]/table/[table_name] |
ConsumeTunnel | ots:ConsumeTunnel | instance/[instance_name]/table/[table_name] |
DescribeTunnel | ots:DescribeTunnel | instance/[instance_name]/table/[table_name] |
BulkImport | ots:BulkImport | instance/[instance_name]/table/[table_name] |
BulkExport | ots:BulkExport | instance/[instance_name]/table/[table_name] |
SQL_Select | ots:SQL_Select | instance/[instance_name]/table/[table_name] |
SQL_Create | ots:SQL_Create | instance/[instance_name]/table/[table_name] |
SQL_DropMapping | ots:SQL_DropMapping | instance/[instance_name]/table/[table_name] |
トンネル API アクセスのためのリソース
トンネルサービス操作はトンネル関連のタスクを処理し、Tablestore コンソールまたは Tablestore SDK を使用して呼び出すことができます。これらの操作に対して Action 要素と Resource 要素を指定すると、Tablestore コンソールで一部の機能が利用できなくなる場合があります。以下で説明するリソース名から acs:ots:[region]:[user_id]: プレフィックスは省略されています。インスタンスとテーブルのみが指定されます。
API 操作/Action | Resource |
ListTable | instance/[instance_name] |
CreateTable | instance/[instance_name] |
UpdateTable | instance/[instance_name] |
DescribeTable | instance/[instance_name] |
DeleteTable | instance/[instance_name] |
AddDefinedColumn | instance/[instance_name] |
DeleteDefinedColumn | 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 のポリシーは、IP アドレスベースのアクセス制御、HTTPS ベースのアクセス制御、多要素認証 (MFA) ベースのアクセス制御、特定の TLS バージョン (TLS v1.2 および TLS v1.3) に基づくアクセス制御、時間ベースのアクセス制御など、さまざまな認証条件をサポートしています。
IP アドレスベースのアクセス制御
IP アドレスホワイトリストを作成して、Tablestore リソースへのアクセスが許可される IP アドレスまたは CIDR ブロックを指定できます。このメソッドは、次のシナリオに適しています。
複数の 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" }個々の 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 ベースのアクセス制御
カスタムポリシーを使用して、Tablestore へのアクセスが HTTPS 経由で行われることを要求できます。
次の例では、Tablestore へのアクセスリクエストに HTTPS を使用することを要求します。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
],
"Version": "1"
} TLS バージョンベースのアクセス制御
カスタムポリシーを使用して、Tablestore へのアクセスを TLS v1.2 または TLS v1.3 のみを使用するリクエストに制限できます。
次の例では、Tablestore へのアクセスを TLS v1.2 および TLS v1.3 のみに制限します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ots:*",
],
"Resource": [
"*"
],
"Condition": {
"StringNotEquals": {
"ots:TLSVersion": [
"TLSv1.2",
"TLSv1.3"
]
}
}
}
]
}MFA ベースのアクセス制御
カスタムポリシーを作成して、多要素認証 (MFA) に合格したリクエストのみに Tablestore リソースへのアクセスを許可できます。
次の例では、Tablestore へのアクセスを MFA に合格したリクエストに制限します。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:MFAPresent ": "true"
}
}
}
],
"Version": "1"
} 時間ベースのアクセス制御
カスタムポリシーを作成して、アクセスリクエストが許可または拒否される時間を指定できます。指定された時間より前に送信されたリクエストは、許可または拒否されます。
次の例では、ユーザーが 2016年1月1日 00:00 (UTC+08:00) より前にのみ 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: 複数のアクセス制御条件
このシナリオでは、IP アドレスが 10.10.XX.XX/24 CIDR ブロックに属する RAM ユーザーは、online-01 および online-02 という名前のインスタンス (これらのインスタンス内のすべてのテーブルを含む) に対して読み取りまたは書き込み操作を実行できます。アクセスは、2016年1月1日 00:00:00 より前に HTTPS 経由でのみ許可されます。
ご利用の Alibaba Cloud アカウントを使用して RAM コンソールにログインします (RAM サービスはデフォルトで有効になっています)。
カスタムポリシーを作成します。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
アクセスポリシーの作成 ページで、[スクリプトエディター] タブをクリックします。ポリシードキュメントに次のスクリプトを入力し、[OK] をクリックします。
{ "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 プレフィックスが含まれるインスタンスのテーブルにデータを書き込むことはできません。このポリシーは、インスタンスレベルの操作には適用されません。
ご利用の Alibaba Cloud アカウントを使用して RAM コンソールにログインします (RAM サービスはデフォルトで有効になっています)。
アクセスポリシーを作成できます。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
ポリシーの作成 ページで、[スクリプトエディター] タブをクリックし、ポリシーエディターに次の内容を入力して、[OK] をクリックします。
{ "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 ユーザーを見つけます。「操作」列の「権限の追加」をクリックします。
権限の付与 パネルで、[カスタムポリシー] を選択し、作成したポリシーの名前を検索し、ポリシーの横にあるチェックボックスを選択して [選択済みのポリシー] 列に追加します。
[権限の付与] をクリックします。
[閉じる] をクリックします。
シナリオ 3: RAM ユーザーが管理できるインスタンスの制限
このシナリオでは、RAM ユーザーは特定のインスタンスのみを管理でき、他のインスタンスを表示または管理することはできません。
ご利用の Alibaba Cloud アカウントを使用して RAM コンソールにログインします (RAM サービスはデフォルトで有効になっています)。
アクセスポリシーを作成します。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
アクセスポリシーの作成 ページで、[スクリプトエディター] タブをクリックします。
次のポリシードキュメントを入力し、[OK] をクリックします。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ots:ListInstance", "ots:ListTagResources" ], "Resource": "acs:ots:*:*:instance/*" }, { "Effect": "Allow", "Action": "ots:*", "Resource": [ "acs:ots:*:*:instance/yourInstance", "acs:ots:*:*:instance/yourInstance/table*" ] }, { "Effect": "Allow", "Action": "cms:Query*", "Resource": "*" } ] }アクセスポリシーの詳細については、次の表をご参照ください。
アクセスポリシー
説明
{ "Effect": "Allow", "Action": [ "ots:ListInstance", "ots:ListTagResources" ], "Resource": "acs:ots:*:*:instance/*" }重要RAM ユーザーがコンソールで特定のインスタンスのみを管理できるようにするには、このオプションを設定する必要があります。
Tablestore コンソールの [概要] ページでリクエストする必要があるため、RAM ユーザーにインスタンスリストとタグリストを取得する権限を付与する必要があります。
{ "Effect": "Allow", "Action": "ots:*", "Resource": [ "acs:ots:*:*:instance/yourInstance", "acs:ots:*:*:instance/yourInstance/table*" ] }RAM ユーザーに
yourInstanceインスタンスとインスタンス内のすべてのテーブルに対するすべての権限を付与します。{ "Effect": "Allow", "Action": "cms:Query*", "Resource": "*" }CloudMonitor を使用してインスタンスとテーブルのモニタリングデータを表示する権限を RAM ユーザーに付与します。
ポリシーの作成 ダイアログボックスで、ポリシー名と説明パラメーターを設定し、[OK] をクリックします。
ポリシーを RAM ユーザーにアタッチします。
左側のナビゲーションウィンドウで、 を選択します。
ユーザー ページで、権限を付与する RAM ユーザーを見つけます。操作 列で、[権限の追加] をクリックします。
権限の付与 パネルで、[カスタムポリシー] を選択し、作成したポリシーの名前を検索し、ポリシーの横にあるチェックボックスを選択して [選択済みのポリシー] 列に追加します。
[権限の付与] をクリックします。
閉じる をクリックします。