实际上,什么是AWS Prefix?

时间:2018-08-02 11:15:37

标签: amazon-web-services prefix

问题

AWS Prefix的定义在什么地方?

背景

在寻找列出S3端点CIDR的方法时,遇到了单词AWS prefix list ,但不确定其确切含义以及定义的术语。

混乱

前缀是指放在前面的单词。根据{{​​3}},对于S3,它应该是对象的起始路径。

但是,显然,它指的是IP地址范围。 前缀如何用于IP范围?历史或原因是什么?

Listing Keys Hierarchically Using a Prefix and Delimiter

  

这既可以用于验证变量中给出的前缀列表,也可以用于获取关联的AWS服务的CIDR块(IP地址范围)。

Terraform aws_prefix_list

  

以前缀列表格式描述可用的AWS服务,其中包括服务的前缀列表名称和前缀列表ID以及服务的IP地址范围。

describe-prefix-lists

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"
}

更新

AWS IP Address Ranges

  

假设您有一个类似10.5.10.0/24的网络   因此您将在该子网中使用10.5.10前缀(从1到255),并且您的网络地址为10.5.10.0

我假设(10.0.0.0/24)表示具有以下内容的网络(32位IP的前24位部分)  从1到254的254个ip地址(0是网络,广播255)。前缀是前24位,后缀(?)是后8位。标识网络的前N位列表是IP前缀列表。

4 个答案:

答案 0 :(得分:3)

术语前缀列表来自路由技术。 CIDR格式的IP地址具有IP前缀和网络前缀(10.1.0.0/16)。 IP前缀为10.1,网络前缀为/ 16。

因此,如果您使用的是CIDR格式的IP地址列表,我们将其称为IP前缀列表。

答案 1 :(得分:3)

什么是AWS VPC上下文中的前缀列表

前缀列表是CIDR格式的IP范围,已分配给区域中的VPC网关端点(S3或DynamoDB)。它是特定于区域的。

例如,从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

  • Gateway VPC Endpoints

    您可以 在网络ACL的出站规则中使用前缀列表ID ,以允许或拒绝到端点中指定服务的出站流量。如果您的网络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提供的安全组-韩立在回答中。

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"]
}

访问控制

Why can’t I connect to an S3 bucket using a gateway VPC endpoint?布局有关S3 VPC网关端点的综合列表,并且前缀列表ID和CIDR将在其中发挥作用。

    VPC中的
  • DNS设置
    重要说明:必须在VPC中启用DNS解析(请参阅网关端点限制)。如果您使用自己的DNS服务器,请确保对AWS服务的DNS请求解析为AWS维护的IP地址。
  • 将表设置路由到Amazon S3
  • 安全组出站规则
  • 网络ACL规则
  • 网关VPC端点策略
  • S3存储桶策略
  • IAM政策

参考

  • Gateway VPC Endpoints

    指定要在其中创建端点的VPC以及要连接的服务。服务由前缀列表(区域的服务名称和ID)标识。前缀列表ID使用形式pl-xxxxxxx,前缀列表名称使用形式“ com.amazonaws.region.service”。使用前缀列表名称(服务名称)创建端点。

答案 2 :(得分:0)

如果要查找的是vpc endpoint的前缀列表ID,例如dynamodb / s3,则它与IP或CIDR不相关。正如文档中提到的那样:

  

创建出站安全组规则时需要前缀列表ID,该规则允许来自VPC的流量通过网关VPC端点访问AWS服务。

因此,如果您的ec2或vpc-lambda安全组outout中没有前缀列表ID,则在连接到dynamodbs3时,您会得到超时

您可以通过运行

获得前缀列表。
  

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"
        }
    ]
}

然后,您可以通过aws Web控制台将此PrefixListId放入出站的安全组中。如果您将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"]
}

答案 3 :(得分:0)

即使回答了有关VPC的前缀定义的问题,我也没有看到与S3有关的前缀定义的答案(除了CIDR相关)。如果您有一个文件夹Photos且其中包含yourpic.jpg文件,则只需将其放在S3中,则其外观应类似于此photos / yourpic.jpg。在S3术语中,称为文件夹photos /的部分称为前缀。如最新的适用于S3的AWS性能调优指南中所述,我们可以使用前缀进行并行处理并提高性能。无论如何,我仍在学习AWS,因此请多加盐。检查下面的链接以供参考。

https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html