AWS Prefixの定義はどこにありますか?
S3エンドポイントCIDRをリストする方法を探しているときに、Word AWSprefix listに遭遇しましたが、それが正確に何を意味し、用語がどこで定義されているのかわかりません。
Prefixは、前に置かれた単語を意味します。 S3の場合、 プレフィックスと区切り文字を使用して階層的にキーをリストする によると、これはオブジェクトへの開始パスである必要があります。
ただし、明らかにIPアドレスの範囲を指します。 prefixがIP範囲に使用されるのはなぜですか?歴史や理由は何ですか?
これは、変数で指定されたプレフィックスリストの検証と、関連するAWSサービスのCIDRブロック(IPアドレス範囲)の取得の両方に使用できます。
使用可能なAWSサービスについて、サービスのプレフィックスリスト名とプレフィックスリストID、およびサービスのIPアドレス範囲を含むプレフィックスリスト形式で説明します。
SERVICE="S3"
REGION="us-west-1"
$ curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | \
jq -r --arg SERVICE "$SERVICE" --arg REGION "${REGION}" '.prefixes[] \
| select(.service==$SERVICE and .region==$REGION)'
{
"ip_prefix": "52.92.48.0/22",
"region": "us-west-1",
"service": "S3"
}
{
"ip_prefix": "54.231.232.0/21",
"region": "us-west-1",
"service": "S3"
}
{
"ip_prefix": "52.219.20.0/22",
"region": "us-west-1",
"service": "S3"
}
{
"ip_prefix": "52.219.24.0/21",
"region": "us-west-1",
"service": "S3"
}
エンドポイントを作成するVPCと、接続するサービスを指定します。 サービスは、プレフィックスリスト(リージョンのサービスの名前とID)によって識別されます。プレフィックスリストIDはpl-xxxxxxxの形式を使用し、プレフィックスリスト名は「com.amazonaws.region.service」の形式を使用します。プレフィックスリスト名(サービス名)を使用してエンドポイントを作成します。
10.5.10.0/24のようなネットワークがあり、そのサブネットに10.5から255までの10.5.10プレフィックスがあり、ネットワークアドレスが10.5.10.0であるとします。
(10.0.0.0/24)は、1から254までの254のIPアドレスを持つネットワークの(32ビットIPの上位24ビット部分)を意味すると思います(0はネットワーク、255はブロードキャストです)。プレフィックスは上位24ビットで、サフィックス(?)は最後の8ビットです。ネットワークを識別する上位Nビットのリストは、IPプレフィックスのリストです。
探しているものがdynamodb/s3のようなvpc endpoint
のプレフィックスリストIDである場合、IPまたはCIDRとは関係ありません。ドキュメントで言及されているように:
プレフィックスリストIDは、VPCからのトラフィックがゲートウェイVPCエンドポイントを介してAWSサービスにアクセスできるようにする送信セキュリティグループルールを作成するために必要です。
そのため、ec2またはvpc-lambdaのセキュリティグループoutboutにprefix-list IDがない場合、dynamodb
またはs3
に接続するとtime outが表示されます。
次のコマンドを実行すると、プレフィックスリストを取得できます
aws ec2 describe-prefix-lists
{
"PrefixLists": [
{
"Cidrs": [
"54.231.0.0/17",
"52.216.0.0/15"
],
"PrefixListId": "pl-63c5400k",
"PrefixListName": "com.amazonaws.us-east-1.s3"
},
{
"Cidrs": [
"52.94.0.0/22",
"52.119.224.0/20"
],
"PrefixListId": "pl-02ad2a6c",
"PrefixListName": "com.amazonaws.us-east-1.dynamodb"
}
]
}
次に、このPrefixListId
をaws Webコンソール経由でセキュリティグループに送信できます。別の地域でterraformを使用する場合、次のようになります。
resource "aws_security_group_rule" "MyService_to_DynamoDB_east" {
count = "${ lower(var.region) == "us-east-1" ? 1 : 0 }"
security_group_id = "${aws_security_group.MyService_Ext_Api.id}"
description = "DynamoDB"
type = "egress"
protocol = "tcp"
from_port = 443
to_port = 443
prefix_list_ids = ["pl-02ad2a6c"]
}
resource "aws_security_group_rule" "MyService_to_DynamoDB_west" {
count = "${ lower(var.region) == "us-west-2" ? 1 : 0 }"
security_group_id = "${aws_security_group.MyService_Ext_Api.id}"
description = "DynamoDB"
type = "egress"
protocol = "tcp"
from_port = 443
to_port = 443
prefix_list_ids = ["pl-0ca54061"]
}
プレフィックスリストという用語は、ルーティングテクノロジーに由来します。 CIDR形式のIPアドレスには、IPプレフィックスとネットワークプレフィックス(10.1.0.0/16)があります。 IPプレフィックスは10.1で、ネットワークプレフィックスは/ 16です。
したがって、CIDR形式のIPアドレスのリストを使用している場合、これをIPプレフィックスリストと呼びます。
プレフィックスリストは、リージョン内のVPCゲートウェイエンドポイント(S3またはDynamoDB)に割り当てられるCIDR形式のIP範囲です。地域によって異なります。
たとえば、2020年2月24日の時点で、us-east-2リージョンのDynamoDBのプレフィックスリストは「52.94.4.0/24」で、52.94.4はIPプレフィックスであり、ネットワークプレフィックスは/ 24です(@John Hanleyが説明)。 DynamoDBのVPCゲートウェイエンドポイントが取得できるIPは、52.94.4.1〜52.94.4.254です(AWSが一部のIPを予約している場合があります)。
$ aws ec2 describe-prefix-lists
{
"PrefixLists": [
{
"Cidrs": [
"52.94.4.0/24"
],
"PrefixListId": "pl-4ca54025",
"PrefixListName": "com.amazonaws.us-east-2.dynamodb"
},
{
"Cidrs": [
"52.219.80.0/20",
"3.5.128.0/22",
"3.5.132.0/23",
"52.219.96.0/20",
"52.92.76.0/22"
],
"PrefixListId": "pl-7ba54012",
"PrefixListName": "com.amazonaws.us-east-2.s3"
}
]
}
これらのプレフィックスリストにはIDと名前があります。 VPCルーティングテーブルとセキュリティグループでプレフィックスリストIDを指定できますが、NACLでは指定できません。 NACLにはCIDRを使用する必要があります。
次のことができます[〜#〜]できない[〜#〜]ネットワークの送信ルールでプレフィックスリストIDを使用できますエンドポイントで指定されたサービスへの送信トラフィックを許可または拒否するACL。ネットワークACLルールでトラフィックを制限する場合は、代わりにサービスのCIDRブロック(IPアドレス範囲)を指定する必要があります。ただし、発信セキュリティグループルールでプレフィックスリストIDを使用できます。詳細については、「セキュリティグループ」を参照してください。
resource "aws_vpc_endpoint" "private_s3" {
vpc_id = "${aws_vpc.foo.id}"
service_name = "com.amazonaws.us-west-2.s3"
}
data "aws_prefix_list" "private_s3" {
prefix_list_id = "${aws_vpc_endpoint.private_s3.prefix_list_id}"
}
resource "aws_network_acl" "bar" {
vpc_id = "${aws_vpc.foo.id}"
}
resource "aws_network_acl_rule" "private_s3" {
network_acl_id = "${aws_network_acl.bar.id}"
rule_number = 200
egress = false
protocol = "tcp"
rule_action = "allow"
cidr_block = "${data.aws_prefix_list.private_s3.cidr_blocks[0]}"
from_port = 443
to_port = 443
}
resource "aws_security_group_rule" "MyService_to_DynamoDB_east" {
count = "${ lower(var.region) == "us-east-1" ? 1 : 0 }"
security_group_id = "${aws_security_group.MyService_Ext_Api.id}"
description = "DynamoDB"
type = "egress"
protocol = "tcp"
from_port = 443
to_port = 443
prefix_list_ids = ["pl-02ad2a6c"]
}
resource "aws_security_group_rule" "MyService_to_DynamoDB_west" {
count = "${ lower(var.region) == "us-west-2" ? 1 : 0 }"
security_group_id = "${aws_security_group.MyService_Ext_Api.id}"
description = "DynamoDB"
type = "egress"
protocol = "tcp"
from_port = 443
to_port = 443
prefix_list_ids = ["pl-0ca54061"]
}
ゲートウェイVPCエンドポイントを使用してS3バケットに接続できないのはなぜですか? S3 VPCゲートウェイエンドポイントに関する包括的なリストをレイアウトし、プレフィックスリストIDとCIDRが役割を果たします。
エンドポイントを作成するVPCと、接続するサービスを指定します。サービスは、プレフィックスリスト(リージョンのサービスの名前とID)によって識別されます。プレフィックスリストIDはpl-xxxxxxxの形式を使用し、プレフィックスリスト名は「com.amazonaws.region.service」の形式を使用します。プレフィックスリスト名(サービス名)を使用してエンドポイントを作成します。