ソース IP アドレス、ソースネットワーク、TLS バージョンなどの条件に基づいてアクセスを制限することで、Tablestore インスタンスを保護するためのインスタンスポリシーを設定します。
仕組み
インスタンスポリシーは、インスタンスにアタッチされるリソースベースのポリシーです。どのプリンシパルが、どのリソースに対して、どのアクションを、どの条件下で実行できるかを定義します。ポリシーの構文と要素については、「Authorization policy syntax and elements」をご参照ください。
Tablestore がアタッチされたポリシーを評価する際には、明示的な拒否が優先されます。つまり、いずれかのDeny ルールが一致すると、Allow ルールの有無にかかわらずリクエストはブロックされます。
設定方法
コンソール
-
Tablestore コンソールにログインし、ページ上部でリージョンを切り替えます。
-
ターゲットインスタンス名またはインスタンスの管理をクリックし、セキュリティポリシー タブをクリックします。
-
権限の新規追加 をクリックします。視覚化ポリシーの表示 タブで、効果 (Effect) を 許可 または 拒否 に設定し、ポリシーの 条件 (Condition) を設定します。
説明ポリシーを JSON スクリプトとして表示するには、スクリプトポリシーの表示 タブに切り替えます。
パラメーター
説明
[条件キー]
条件キーです。有効値は次のとおりです。
-
acs:SourceVpc:ソース VPC によってクライアントアクセスを制限します。 -
ots:TLSVersion:ソースで使用される TLS バージョンによってクライアントアクセスを制限します。 -
acs:SourceIp:ソース IP アドレスによってクライアントアクセスを制限します。 -
ots:AccessId:リクエストユーザーのアクセスキー ID (AK) によってクライアントアクセスを制限します。 -
acs:SecureTransport:リクエストで HTTPS を使用しているかどうかによってクライアントアクセスを制限します。
重要acs:SourceIp条件キーは、パブリックインターネットと VPC 内部トラフィックを区別せず、リクエストのソース IP アドレスのみに一致します。アクセス制限にacs:SourceIpのみを使用すると、同じ IP 範囲を使用している別の VPC からのリクエストも許可され、不正アクセスリスクが生じます。acs:SourceIpは必ずacs:SourceVpcと組み合わせ、ネットワークの送信元を明確にしてください。[演算子]
条件キーに適用する演算子です。詳細については、「Condition operators」をご参照ください。
[条件値]
選択した条件キーの値。
-
acs:SourceVpc:有効な VPC ID を入力します。パブリックインターネットからのアクセスのみを許可するには、StringNotLike演算子とあわせてvpc-*を入力します。複数の値を入力する場合は、VPC ID を 1 行に 1 つずつ入力します。
-
ots:TLSVersion:TLS バージョンを選択します。有効値は TLSv1、TLSv1.1、TLSv1.2、TLSv1.3 です。 -
acs:SourceIp:IP アドレスまたは CIDR ブロックを入力します。複数の値を入力する場合は、IP アドレスまたは CIDR ブロックを 1 行に 1 つずつ入力します。
-
ots:AccessId:ユーザーのアクセスキー ID (AK) を入力します。複数の値を入力する場合は、アクセスキー ID を 1 行に 1 つずつ入力します。
-
acs:SecureTransport:HTTPS アクセスのみを許可するには値をtrueに設定し、HTTP アクセスのみを許可するにはfalseに設定します。
-
-
OK をクリックします。
ポリシーがアタッチされた後、完全なスクリプトポリシーの表示 タブで完全なポリシーを表示できます。
API
UpdateInstancePolicy API と DeleteInstancePolicy API を使用して、インスタンスポリシーを管理します。
一般的なシナリオとポリシー例
次の例は、一般的なアクセス制御シナリオにおける条件の組み合わせと JSON ポリシーを示します。
特定のパブリックIPアドレスからのアクセス許可
acs:SourceIp と acs:SourceVpc を組み合わせてネットワークの送信元を明確にし、特定のパブリック IP アドレスへのアクセスを制限します。パブリックインターネットのトラフィックに一致させるには、StringNotLike 演算子を使用して acs:SourceVpc を vpc-* に設定します。
効果 (Effect) を 許可 に設定し、以下の 2 つの条件を追加します。
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
インスタンスへのアクセスを許可するパブリック IP アドレスまたは CIDR ブロック。 |
|
|
|
|
Allow ステートメントは、パブリック IP アドレス 203.0.113.5 からのリクエストを許可します。最初の Deny ステートメントは他のすべてのパブリック IP アドレスをブロックし、2つ目は VPC からのすべてのリクエストをブロックします。その結果、指定したパブリック IP アドレスからのリクエストのみが myinstance インスタンスにアクセスできます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"IpAddress": {
"acs:SourceIp": ["203.0.113.5"]
},
"StringNotLike": {
"acs:SourceVpc": ["vpc-*"]
}
}
},
{
"Effect": "Deny",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"NotIpAddress": {
"acs:SourceIp": ["203.0.113.5"]
},
"StringNotLike": {
"acs:SourceVpc": ["vpc-*"]
}
}
},
{
"Effect": "Deny",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringLike": {
"acs:SourceVpc": ["vpc-*"]
}
}
}
]
}
特定のVPCからのアクセス許可
この構成を使用すると、インスタンスへのアクセスを、指定した 1 つの VPC からのトラフィックのみに制限できます。
効果 (Effect) を 許可 に設定し、以下の条件を追加します。
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
インスタンスへのアクセスを許可する VPC の ID。 |
Allow ステートメントは、VPC vpc-bp1xxxxxxxxxxxxxxxx からのリクエストを許可します。Deny ステートメントは、他の VPC およびパブリックインターネットからのリクエストをブロックします。その結果、指定した VPC からのリクエストのみが myinstance インスタンスにアクセスできます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringEquals": {
"acs:SourceVpc": ["vpc-bp1xxxxxxxxxxxxxxxx"]
}
}
},
{
"Effect": "Deny",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringNotEquals": {
"acs:SourceVpc": ["vpc-bp1xxxxxxxxxxxxxxxx"]
}
}
}
]
}
特定のVPC内の特定IP範囲からのアクセス許可
VPC と IP 範囲の条件を組み合わせることで、指定した VPC 内の、指定した CIDR ブロックからのアクセスのみをインスタンスに許可できます。
効果 (Effect) を 許可 に設定し、次の 2 つの条件を追加します。
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
インスタンスへのアクセスを許可する CIDR ブロック。 |
|
|
|
VPC の ID。これにより、リクエストの送信元をその VPC に制限します。 |
Allow ステートメントは、VPC vpc-bp1xxxxxxxxxxxxxxxx 内の CIDR ブロック 192.168.0.0/16 からのリクエストを許可します。最初の Deny ステートメントは、他の VPC およびパブリックインターネットからのリクエストをブロックします。2つ目は、指定した VPC 内で指定した CIDR ブロックの範囲外からのリクエストをブロックします。その結果、指定した VPC 内の指定した CIDR ブロックからのリクエストのみが myinstance インスタンスにアクセスできます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"IpAddress": {
"acs:SourceIp": ["192.168.0.0/16"]
},
"StringEquals": {
"acs:SourceVpc": ["vpc-bp1xxxxxxxxxxxxxxxx"]
}
}
},
{
"Effect": "Deny",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringNotEquals": {
"acs:SourceVpc": ["vpc-bp1xxxxxxxxxxxxxxxx"]
}
}
},
{
"Effect": "Deny",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringEquals": {
"acs:SourceVpc": ["vpc-bp1xxxxxxxxxxxxxxxx"]
},
"NotIpAddress": {
"acs:SourceIp": ["192.168.0.0/16"]
}
}
}
]
}
インスタンスアクセスにおけるTLSバージョンの制限
クライアントが、リストされている TLS バージョンのいずれかをネゴシエートしない限り、インスタンスにアクセスできないようにします。
効果 (Effect) を 許可 に設定し、次の条件を追加します。
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
|
Allow ステートメントは、TLSv1.2 または TLSv1.3 を使用するリクエストを許可します。Deny ステートメントは、それ以外の TLS バージョンをすべてブロックします。その結果、TLSv1.2 または TLSv1.3 を使用するリクエストのみが myinstance インスタンスにアクセスできます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringEquals": {
"ots:TLSVersion": ["TLSv1.2", "TLSv1.3"]
}
}
},
{
"Effect": "Deny",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringNotEquals": {
"ots:TLSVersion": ["TLSv1.2", "TLSv1.3"]
}
}
}
]
}
制限事項
1つのインスタンスに追加できるすべての条件エントリの合計サイズは 4 KB を超えることはできません。