【问题标题】:KMS decrypt works locally but not from within EC2 instanceKMS 解密在本地工作,但不能在 EC2 实例内工作
【发布时间】:2018-01-17 15:12:07
【问题描述】:

我正在尝试使用 KMS 解密存储在 S3 存储桶中的文件。在 EC2 实例中,我可以从 S3 中检索此文件,但是当我尝试使用 KMS 对其进行解密时,出现以下错误:

HTTPSConnectionPool(host='kms.us-east-1.amazonaws.com', port=443): 最大重试次数超出 url: / (由 ConnectTimeoutError(, 'Connection to kms.us-east-1. amazonaws.com 超时。(连接超时=60)'))

但是,我可以从我的本地计算机上成功解密此文件。有谁知道为什么会这样?

如果需要其他信息,我很乐意提供:)

【问题讨论】:

  • 您无法从任何地方访问 KMS,包括在 EC2 内部,除非您可以从计算机访问 Internet。听起来你没有。

标签: amazon-web-services aws-kms


【解决方案1】:

当您为 Lambda 启用 VPC 时,AWS 会向您显示以下消息 -

当您启用 VPC 时,您的 Lambda 函数将失去默认的互联网访问权限。如果您的函数需要外部 Internet 访问,请确保您的安全组允许出站连接并且您的 VPC 具有 NAT 网关。

因此,请确保您的 lambda 可以通过正确的安全组和 NAT 网关访问互联网。

还请注意,为您的子网设置 IG 是不够的。您需要有一个 NAT 实例或网关,以及从您的子网到该网关的路由表中的路由,以便 lambda 具有与自定义 VPC 关联的互联网访问权限。

AWS Lambda 使用您提供的 VPC 信息来设置 ENI,以允许您的 Lambda 函数访问 VPC 资源。每个 ENI 都从您指定的子网的 IP 地址范围内分配了一个私有 IP 地址,但没有分配任何公共 IP 地址。因此,如果您的 Lambda 函数需要 Internet 访问(例如,访问没有 VPC 终端节点的 AWS 服务,例如 Kinesis),您可以在您的 VPC 内配置一个 NAT 实例,或者您可以使用 Amazon VPC NAT 网关。您不能使用连接到您的 VPC 的 Internet 网关,因为这需要 ENI 具有公共 IP 地址。

重要

如果您的 Lambda 函数需要 Internet 访问,请勿将其附加到公共子网或无法访问 Internet 的私有子网。相反,仅将其附加到通过 NAT 实例或 Amazon VPC NAT 网关访问 Internet 的私有子网。

来源:http://docs.aws.amazon.com/lambda/latest/dg/vpc.html

【讨论】:

  • 一个 Amazon VPC NAT 网关的成本!在撰写本文时......每月 32.4 美元!
  • 只有在私有子网中部署服务时才需要 NAT 实例。如果您不想这样做,只需将其部署在公有子网中并将公有 IP 分配给 EC2 实例(上面的答案有点特定于 Lambda)。此外,如果您想要更便宜的替代方案,请使用 NAT 实例,如果您需要容错,请将其放在自动缩放组后面。
【解决方案2】:

一种情况可能是您使用 VPC 端点连接到 s3 存储桶并且没有互联网连接。

如果是这种情况,那么您必须通过 NAT 或将您的实例置于公共子网中来启用 Internet 连接。

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多