インスタンスポリシーを設定して、送信元 IP アドレス、送信元ネットワーク、TLS バージョンなどの条件に基づいてアクセスを制限し、Tablestore インスタンスを保護します。
仕組み
インスタンスポリシーは、インスタンスにアタッチされるリソースベースの認可ポリシーです。どのプリンシパルが、どのリソースに対して、どのアクションを、どの条件の下で実行できるかを定義します。ポリシーの構文と要素については、「認可ポリシーの構文と要素」をご参照ください。
Tablestore がアタッチされたポリシーを評価する際は、明示的な拒否が優先されます。一致する Deny ルールが 1 つでもある場合、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と組み合わせて使用し、ネットワークの送信元を明確にしてください。[演算子]
条件キーに適用する演算子です。詳細については、「条件演算子」をご参照ください。
[条件値]
選択された条件キーの値。
-
acs:SourceVpc:有効な VPC ID を入力します。パブリックインターネットからのアクセスのみを許可するには、StringNotLike演算子でvpc-*を入力します。複数の値を入力する場合は、1行に 1 つの VPC ID を入力します。
-
ots:TLSVersion:TLS バージョンを選択します。有効な値は TLSv1、TLSv1.1、TLSv1.2、TLSv1.3 です。 -
acs:SourceIp:IP アドレスまたは CIDR ブロックを入力します。複数の値を入力する場合は、1行に 1 つの IP アドレスまたは CIDR ブロックを入力します。
-
ots:AccessId:ユーザーのアクセスキー ID (AK) を入力します。複数の値を入力する場合は、1行に 1 つの AccessKey ID を入力します。
-
acs:SecureTransport:HTTPS アクセスのみを許可する場合はtrue、HTTP アクセスのみを許可する場合はfalseに設定します。
-
OKをクリックします。
ポリシーがアタッチされると、完全なスクリプトポリシーの表示 タブで完全なポリシーを表示できます。
API
UpdateInstancePolicy API、DeleteInstancePolicy API、CheckInstancePolicy API を使用して、インスタンスポリシーを管理できます。
一般的なシナリオとポリシーの例
次の例では、代表的なアクセス制御シナリオにおける条件の組み合わせと JSON ポリシーを示します。
特定のパブリック IP アドレスからのアクセスのみを許可
ネットワークの送信元が曖昧にならないように、acs:SourceIp を acs:SourceVpc と組み合わせて、特定のパブリック IP アドレスからのアクセスを制限します。パブリックインターネットのトラフィックに一致させるには、StringNotLike 演算子で acs:SourceVpc を vpc-* に設定します。
効果 (Effect) を 許可 に設定し、以下の 2 つの条件を追加します:
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
インスタンスへのアクセスを許可するパブリック IP アドレスまたは CIDR ブロック。 |
|
|
|
|
次の例では、パブリック IP アドレス 203.0.113.5 から、名前が 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-*"]
}
}
}
]
}
特定のVPCからのアクセスのみを許可
この設定を使用すると、インスタンスへのトラフィックを、指定した 1 つの VPC からに制限できます。
効果 (Effect) を 許可 に設定し、次の条件を追加します:
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
インスタンスへのアクセスを許可する VPC の ID。 |
次の例では、ID が vpc-bp1xxxxxxxxxxxxxxxx の VPC から、名前が myinstance で始まるインスタンスへのアクセスのみを許可します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["ots:*"],
"Resource": ["acs:ots:*:13791xxxxxxxxxxx:instance/myinstance*"],
"Principal": ["*"],
"Condition": {
"StringEquals": {
"acs:SourceVpc": ["vpc-bp1xxxxxxxxxxxxxxxx"]
}
}
}
]
}
特定のVPC内の特定のIP範囲からのアクセスのみを許可
VPC と IP 範囲の条件を組み合わせて、指定した VPC 内の指定した CIDR ブロックからのみインスタンスにアクセスできるようにします。
効果 (Effect) を 許可 に設定し、以下の 2 つの条件を追加します:
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
インスタンスへのアクセスを許可する CIDR ブロック。 |
|
|
|
VPC の ID。リクエストの送信元をその VPC に制限します。 |
次の例では、ID が vpc-bp1xxxxxxxxxxxxxxxx の VPC 内の CIDR ブロック 192.168.0.0/16 から、名前が 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"]
}
}
}
]
}
インスタンスアクセスにおけるTLS バージョンの制限
クライアントがインスタンスにアクセスするには、リストにある TLS バージョンのいずれかでネゴシエーションを完了する必要があります。
効果 (Effect)を許可に設定し、次の条件を追加します:
|
[条件キー] |
[演算子] |
[条件値] |
|
|
|
|
次の例では、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"]
}
}
}
]
}
制限事項
1 つのインスタンスに追加できるすべての条件エントリの合計サイズは 4 KB を超えることはできません。