0

我有部署在默认 VPC 中的 Lambda,该 VPC 具有开放的 Endpoint to S3 服务,Lambda 具有广泛开放所有 S3 操作的 IAM 角色

iamRoleStatements:
  - Effect: "Allow"
    Action:
      - "rds:*"
      - "ec2:CreateNetworkInterface"
    Resource: "*"
  - Effect: Allow
    Action:
      - s3:*
    Resource: "*"

我通过以下方式访问 NodeJS 中的 S3 SDK:

const {
  DIGITAL_OCEAN_SPACES_ENDPOINT,
  DIGITAL_OCEAN_SPACES_ACCESS,
  DIGITAL_OCEAN_SPACES_REGION,
  DIGITAL_OCEAN_SPACES_SECRET,
  DIGITAL_OCEAN_SPACES_BUCKET_NAME,
} = process.env;

const spacesEndpoint = new Endpoint(DIGITAL_OCEAN_SPACES_ENDPOINT);
const S3Client = new S3({
  accessKeyId: DIGITAL_OCEAN_SPACES_ACCESS,
  endpoint: spacesEndpoint,
  region: DIGITAL_OCEAN_SPACES_REGION,
  secretAccessKey: DIGITAL_OCEAN_SPACES_SECRET,
});

并且 Lambda 超时 - 它无法连接到 DigitalOcean S3 存储桶。我还需要添加什么才能访问 DO?

4

1 回答 1

1

VPC 中的 Lambda 函数没有 Internet 访问权限,也没有公共 IP。来自文档

将函数连接到公共子网不会为其提供Internet 访问权限或公共 IP 地址

要纠正这个问题,您应该将您的函数“放置”在私有子网(非公共子网)中,并使用NAT 网关/实例和正确配置的路由表来提供访问。

由于您已将默认 VPC 与所有子网一起使用,因此您需要创建一个新子网,该子网将是私有的,因为使用公共子网将不起作用。然后您需要正确设置 NAT 网关/设备。或者,不要将您的函数放在 VPC 中。

于 2020-12-10T00:12:42.817 回答