web-dev-qa-db-ja.com

実際にAWSプレフィックスとは何ですか?

質問

AWS Prefixの定義はどこにありますか?

バックグラウンド

S3エンドポイントCIDRをリストする方法を探しているときに、Word AWSprefix listに遭遇しましたが、それが正確に何を意味し、用語がどこで定義されているのかわかりません。

錯乱

Prefixは、前に置かれた単語を意味します。 S3の場合、 プレフィックスと区切り文字を使用して階層的にキーをリストする によると、これはオブジェクトへの開始パスである必要があります。

ただし、明らかにIPアドレスの範囲を指します。 prefixがIP範囲に使用されるのはなぜですか?歴史や理由は何ですか?

Terraform aws_prefix_list

これは、変数で指定されたプレフィックスリストの検証と、関連するAWSサービスのCIDRブロック(IPアドレス範囲)の取得の両方に使用できます。

describe-prefix-lists

使用可能なAWSサービスについて、サービスのプレフィックスリスト名とプレフィックスリストID、およびサービスのIPアドレス範囲を含むプレフィックスリスト形式で説明します。

AWS 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エンドポイント

エンドポイントを作成する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プレフィックスのリストです。

11
mon

探しているものが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"]
}
2
LeOn - Han Li

プレフィックスリストという用語は、ルーティングテクノロジーに由来します。 CIDR形式のIPアドレスには、IPプレフィックスとネットワークプレフィックス(10.1.0.0/16)があります。 IPプレフィックスは10.1で、ネットワークプレフィックスは/ 16です。

したがって、CIDR形式のIPアドレスのリストを使用している場合、これをIPプレフィックスリストと呼びます。

7
John Hanley

AWS VPCコンテキストのプレフィックスリストとは

プレフィックスリストは、リージョン内の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を使用する必要があります。

enter image description here

  • ゲートウェイVPCエンドポイント

    次のことができます[〜#〜]できない[〜#〜]ネットワークの送信ルールでプレフィックスリストIDを使用できますエンドポイントで指定されたサービスへの送信トラフィックを許可または拒否するACL。ネットワークACLルールでトラフィックを制限する場合は、代わりにサービスのCIDRブロック(IPアドレス範囲)を指定する必要があります。ただし、発信セキュリティグループルールでプレフィックスリストIDを使用できます。詳細については、「セキュリティグループ」を参照してください。

Terraformの例

NACL

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
}

@LeOnが提供するセキュリティグループ-Han Liの回答。

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のDNS設定
    重要:DNS解決をVPCで有効にする必要があります(ゲートウェイエンドポイントの制限を参照)。独自のDNSサーバーを使用している場合は、AWSサービスへのDNSリクエストがAWSが維持するIPアドレスに解決されることを確認してください。
  • Amazon S3へのルートテーブル設定
  • セキュリティグループの送信ルール
  • ネットワークACLルール
  • ゲートウェイVPCエンドポイントポリシー
  • S3バケットポリシー
  • IAMポリシー

参考文献

  • ゲートウェイVPCエンドポイント

    エンドポイントを作成するVPCと、接続するサービスを指定します。サービスは、プレフィックスリスト(リージョンのサービスの名前とID)によって識別されます。プレフィックスリストIDはpl-xxxxxxxの形式を使用し、プレフィックスリスト名は「com.amazonaws.region.service」の形式を使用します。プレフィックスリスト名(サービス名)を使用してエンドポイントを作成します。

1
mon