AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 822979
Accepted
M. Glatki
M. Glatki
Asked: 2016-12-29 01:52:15 +0800 CST2016-12-29 01:52:15 +0800 CST 2016-12-29 01:52:15 +0800 CST

如何验证 AWS VPC (S3) 终端节点是否有效?

  • 772

我使用 CloudFormation 向我的 VPC 添加了一个 VPC 终端节点,并允许使用 s3。路由在 AWS 控制台中可见,但在 EC2 实例的本地路由表中不可见:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.29.4.129    0.0.0.0         UG    0      0        0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
172.29.4.128    0.0.0.0         255.255.255.128 U     0      0        0 eth0

如何验证 VPC 中的 EC2 实例实际使用 S3 的 VPC 终端节点,而不是可用的互联网连接?

routing amazon-ec2 amazon-s3 amazon-web-services amazon-vpc
  • 7 7 个回答
  • 30015 Views

7 个回答

  • Voted
  1. Valer
    2019-10-29T07:59:30+08:002019-10-29T07:59:30+08:00

    我想直接的方法是实际探测这些路线。

    您可以跟踪路由到 s3 并查看 NAT 网关的内部 IP 是否在输出中的任何位置(例如第一跳)。

    首先,在控制台中检查 NAT 网关内部 IP 。

    带有端点集的示例输出 - 未显示网关 IP。这是你想看到的。

    $ traceroute -n -T -p 443 s3.amazonaws.com                                
    traceroute to s3.amazonaws.com (52.216.204.93), 30 hops max, 60 byte packets
     1  * * *
     2  * * *
     3  * * *
     4  * * *
     5  * * *
     6  * * *
     7  52.216.204.93  0.662 ms  0.668 ms  0.637 ms
    
    

    不同目的地的示例输出,通过 NAT(见第一跳)

    $ traceroute -n -T -p 443 serverfault.com
    traceroute to serverfault.com (151.101.129.69), 30 hops max, 60 byte packets
     1  172.20.10.188  0.206 ms  0.147 ms  0.145 ms
     2  * * *
     3  * * *
     4  * * *
     5  * * *
     6  * * *
     7  100.65.13.49  0.956 ms 100.65.13.113  1.253 ms *
     8  52.93.28.209  1.083 ms 52.93.28.231  1.213 ms 52.93.28.235  1.151 ms
     9  100.100.4.38  1.770 ms 100.100.4.46  2.089 ms 100.100.4.36  1.723 ms
    10  103.244.50.242  1.136 ms 100.100.4.44  1.702 ms  2.738 ms
    11  151.101.129.69  1.013 ms 103.244.50.244  1.745 ms 151.101.129.69  1.142 ms
    
    • 17
  2. Best Answer
    M. Glatki
    2016-12-30T03:34:57+08:002016-12-30T03:34:57+08:00

    我找到了一种验证 VPC 终端节点使用情况的方法。

    1. 登录 VPC 中的 AWS EC2 实例
    2. 配置 aws cli 客户端
    3. 运行aws ec2 describe-prefix-lists;对于Windows PowerShell,Get-EC2PrefixList

    结果应在属性中包含 VPC 终端节点前缀列表 ID PrefixListId。

    如需进一步验证,您可以将以下策略应用于 S3 存储桶:

    {
      "Version": "2008-10-17",
      "Statement": [
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::mybucket"
          ],
          "Condition": {
            "StringNotEquals": {
              "aws:sourceVpc": [
                "vpc-121212"
              ]
            }
          }
        }
      ]
    }
    

    使用您的 vpc ID 而不是 vpc-121212。然后,您应该只能从给定的 VPC 访问 S3 存储桶

    • 13
  3. Michael
    2018-01-31T01:26:31+08:002018-01-31T01:26:31+08:00

    您可以打开 S3 日志记录并检查文件是否从您的私有 IP 而不是公共 IP 访问。如果您的日志记录显示私有 IP 正在访问您已正确配置的存储桶。祝你好运!

    • 10
  4. VictorB
    2017-09-27T03:27:55+08:002017-09-27T03:27:55+08:00

    我建议在没有 Internet 访问权限的子网中启动 ec2 实例(允许 IAM 角色列出 s3 存储桶)。

    路由表中基本上只有 2 个活动规则(您的 VPC 子网范围和 s3 端点)。

    连接到实例并运行命令:

    aws s3 ls /**
    

    它应该会因超时而失败,因为默认情况下 boto 会创建对全局 s3 url (s3.amazonaws.com) 的请求。

    export AWS_DEFAULT_REGION=us-east-1** ## your region here
    aws s3 ls /**
    

    应该列出您在 us-east-1 区域中的存储桶(vpc 路由器会将您的请求路由到 s3.us-east-1.amazonaws.com)。

    • 4
  5. Jason Martin
    2016-12-29T07:41:48+08:002016-12-29T07:41:48+08:00

    您的实例将发往 S3 的数据包转发到本地网关,然后 VPC“路由器”从那里将它们转发到 S3 终端节点。不需要客户端配置或知识。

    您可以使用一组非常严格的 ACL 配置 S3 端点,以便它拒绝所有请求并观察您的客户端也收到故障。

    • 1
  6. dimisjim
    2020-02-22T07:38:30+08:002020-02-22T07:38:30+08:00

    @m-glatki 的答案(由于某种原因被接受)实际上是不正确的。

    首先,您必须显式启用 ec2 VPC 接口才能执行aws ec2 describe-prefix-lists调用,否则您将获得超时。

    其次,即使您可以调用该 API,它也不会告诉您是否正在通过该端点路由您的流量。它仅提供有关当前区域中特定前缀列表 (PL) 的详细信息。

    您需要做的是将 S3 VPC 端点与子网的路由表相关联,并确保您的 EC2 实例或服务的安全组允许通过该端点进行出口连接(您应该可以使用默认的“允许所有”出口规则)。这将通过端点路由 S3 流量,即使您连接了 NAT 网关。

    您可以通过检查其关联的 cloudwatch 日志来验证您的流量是否未通过 NAT 路由(请参阅BytesOutToDestination、BytesOutToSource、BytesInFromDestination和BytesInFromSource指标)

    还要检查@michael 正确指出的 S3 存储桶日志。

    • 1
  7. ozeebee
    2021-08-12T02:06:45+08:002021-08-12T02:06:45+08:00

    详细说明@m-glatki 解决方案,在存储桶上添加一个限制 S3 访问特定 VPC 端点的策略:

    {
        "Version": "2008-10-17",
        "Statement": [
            {
                "Effect": "Deny",
                "Principal": "*",
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::mybucket",
                "Condition": {
                    "StringNotEquals": {
                        "aws:SourceVpce": "vpce-01ab2c3d4"
                    }
                }
            }
        ]
    }
    

    您将只能从使用 VPC 终端节点的进程中列出存储桶内容。否则,您将收到一条消息:

    An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

    要获取 VPC 终端节点 ID,请使用以下命令:aws ec2 describe-vpc-endpoints

    看到这个链接

    • 1

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 将路由永久添加到 Solaris 10

  • Quagga 套件中的 ./configure --disable-zebra 代表什么?

  • 使用特定接口进行出站连接(Ubuntu 9.04)

  • Linux TC/策略路由工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve