本トピックでは、Resource Access Management (RAM) ポリシーにおける 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 要素を使用して、ユーザーがアクセスできる Tablestore リソースを指定できます。各フィールドでは、アスタリスク (*) ワイルドカードを使用したプレフィックスおよびサフィックスマッチングがサポートされています。Resource のフォーマットは次のとおりです。
acs:ots:[region]:[user_id]:instance/[instance_name]/table/[table_name]
プロダクトは ots に固定されます。[region] には、リソースが配置されているリージョンの ID (例:cn-hangzhou) を設定します。[user_id] には、ご利用の Alibaba Cloud アカウント ID を設定します。[instance_name] には、Tablestore インスタンス名を設定します。[table_name] には、Tablestore テーブル名を設定します。これらのフィールドは、必要に応じて設定できます。
Tablestore のインスタンス名では大文字と小文字が区別されません。Resource の定義では、[instance_name] に小文字を使用する必要があります。
トンネルの Resource 定義は、インスタンスレベルでのみ指定できます。つまり、トンネルリソースは、プロダクト、リージョン、ユーザー ID、インスタンス名で構成されます。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、およびリアルタイムのチャンネル管理と読み取り/書き込み API を提供しています。次の表に、さまざまなタイプの API のリソース設定について説明します。
管理 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 によってアクセスされるリソース
データ API は、主にテーブルおよび行関連の操作に使用され、コンソールおよびソフトウェア開発キット (SDK) から呼び出されます。これらの API の Action および Resource の定義は、ユーザーがコンソールをどのように使用するかに影響します。以下のリソース定義では、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 によってアクセスされるリソース
トンネル 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] |
|
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) の使用、TLSv1.2 および TLSv1.3 の使用、アクセス時間など、ポリシーにおける複数の認証条件をサポートしています。
IP アドレスによる制限
ホワイトリストを設定することで、Tablestore にアクセスできるソース IP アドレスを制限できます。CIDR ブロックによるフィルターも可能です。以下に、代表的な設定例を示します。
-
複数の 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 アドレスと CIDR ブロックを制限します。
次の例では、ソース IP アドレスが 10.10.XX.XX のリクエスト、または 10.10.XX.XX/24 CIDR ブロックからのアクセスのみを許可します。
{ "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 へのアクセスを制限できます。
次の例では、Tablestore へのアクセスリクエストが HTTPS 経由で送信されることを要求します。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
],
"Version": "1"
}
TLS バージョンによる制限
カスタムポリシーを使用して、TLSv1.2 および TLSv1.3 経由での Tablestore へのアクセスを制限できます。
次の例では、Tablestore へのアクセスリクエストが TLSv1.2 または TLSv1.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: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:複数の権限付与条件
10.10.XX.XX/24 CIDR ブロックからのユーザーに、online-01 および online-02 という名前のすべてのインスタンス (インスタンス内のすべてのテーブルを含む) に対する読み取りまたは書き込み操作を許可します。アクセスは 2016-01-01 00:00:00 より前のみ許可され、HTTPS 経由である必要があります。
-
ご利用の Alibaba Cloud アカウントで Resource Access Management (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 ユーザーを見つけ、[操作] 列の 権限の追加 をクリックします。
-
権限の追加 パネルで、権限の種類を [カスタムポリシー] に設定します。作成したポリシーを検索し、その横にあるチェックボックスを選択します。ポリシーが [選択済み] セクションに追加されます。
-
OK をクリックします。
-
閉じる をクリックします。
-
シナリオ 2:リクエストの拒否
ソース IP アドレスが 10.10.XX.XX のユーザーに対して、中国 (北京) リージョンで名前が online または product で始まるインスタンス内のすべてのテーブルへの書き込み操作を拒否します。これにはインスタンスに対する操作は含まれません。
-
ご利用の Alibaba Cloud アカウントで Resource Access Management (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 アカウントで Resource Access Management (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": "*" }RAM ユーザーに Cloud Monitor の権限を付与し、インスタンスとテーブルのモニタリングデータを表示できるようにします。
-
-
ポリシーの作成 ダイアログボックスで、ポリシー名と説明を入力し、OK をクリックします。
-
RAM ユーザーにポリシーを付与します。
-
左側のナビゲーションウィンドウで、を選択します。
-
ユーザー ページで、権限を付与する RAM ユーザーを見つけ、[操作] 列の 権限の追加 をクリックします。
-
権限の追加 パネルで、権限の種類を [カスタムポリシー] に設定します。作成したポリシーを検索し、対応するチェックボックスを選択します。ポリシーは [選択済み] セクションに追加されます。
-
OK をクリックします。
-
閉じる をクリックします。
-