このトピックでは、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 フィールドの値は小文字で指定することをお勧めします。
トンネルサービスの Resource 要素は、テーブルではなくインスタンスによって定義され、service、region、user_id、instance_name などのフィールドが含まれます。 Resource 要素は、次の形式で指定します。
acs:ots:[region]:[user_id]:instance/[instance_name] 一般的なリソース定義
すべてのリージョンのすべてのユーザーのすべてのリソース
"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 は、インスタンス管理操作、テーブル操作、データの読み取り/書き込み操作、トンネルサービスの操作など、さまざまな種類の API 操作を提供します。 次の表に、API 操作のリソースを設定する方法を示します。
インスタンス管理操作
インスタンス管理操作はインスタンス関連の操作であり、Tablestore コンソールまたは OpenAPI を使用して呼び出すことができます。 次のリソースの名前からは、acs:ots:[region]:[user_id]: プレフィックスが省略されています。 インスタンスのみが記述されています。
API 操作 | Action | Resource |
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] |
テーブル操作とデータの読み取り/書き込み操作
テーブル操作とデータの読み取り/書き込み操作は、テーブルと行に対して実行され、Tablestore コンソールまたは Tablestore SDK を使用して呼び出すことができます。 テーブル操作とデータの読み取り/書き込み操作の Action 要素と Resource 要素を指定すると、Tablestore コンソールでは一部の機能が使用できなくなる場合があります。 次のリソースの名前からは、acs:ots:[region]:[user_id]: プレフィックスが省略されています。 インスタンスとテーブルのみが記述されています。
API 操作/Action | Resource |
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] |
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] |
トンネルサービスの操作
トンネルサービスの操作はトンネル関連の操作であり、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 バージョン ベースのアクセス制御、および時間ベースのアクセス制御をサポートしています。
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 + 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 ブロックを使用する RAM ユーザーは、online-01 と online-02 という名前のインスタンスと、インスタンス内のすべてのテーブル (テーブルからのデータの読み取りとテーブルへのデータの書き込みを含む) を管理できます。 アクセスは、2016 年 1 月 1 日 00:00:00 より前に HTTPS 経由でのみ許可されます。
RAM コンソール にログオンします。 RAM サービスをアクティブにする必要があることに注意してください。
カスタムポリシーを作成します。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックします。 [JSON] タブで、ポリシードキュメントに次のスクリプトを入力し、[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 プレフィックスが含まれるインスタンスに属するテーブルにデータを書き込むことができません。 このポリシーは、インスタンスに対する操作には有効ではありません。
RAM コンソール にログオンします。 RAM サービスをアクティブにする必要があることに注意してください。
カスタムポリシーを作成します。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックします。 [JSON] タブで、ポリシードキュメントに次のスクリプトを入力し、[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 ユーザーは特定のインスタンスのみを管理することが許可され、他のインスタンスを表示および管理することは禁止されています。
[RAM コンソール] にログオンします。RAM サービスをアクティブ化する必要があることに注意してください。
カスタムポリシーを作成します。たとえば、RAM ユーザーがインスタンス abc のみを管理できるようにします。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックします。
ポリシードキュメントに次のスクリプトを入力し、[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/*" }重要Tablestore コンソールで 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 ユーザーを探します。[アクション] 列で、[権限の追加] をクリックします。
[権限の付与] パネルで、[カスタムポリシー] を選択し、作成したポリシーの名前を検索して、ポリシーの横にあるチェックボックスをオンにして、[選択済みポリシー] 列にポリシーを追加します。
[権限の付与] をクリックします。
閉じる をクリックします。