我已经使用 CloudFormation 设置了 AWS Transfer SFTP,并且正在使用自定义身份提供程序设置,其中 API 网关面向 Lambda 函数。以前,我的设置运行良好,但 API 网关是公开的,我想将其设为私有并将其带入 VPC。我设置了一个 VPC 接口端点并将其与 API 网关相关联。以下相关 CloudFormation 位:
APIVPCEndpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
PrivateDnsEnabled: true
ServiceName: com.amazonaws.us-east-1.execute-api
VpcEndpointType: Interface
SubnetIds:
- subnet-11111111
- subnet-22222222
SecurityGroupIds:
- sg-111111111111111
VpcId: vpc-222222
CustomIdentityProviderApi:
Type: AWS::ApiGateway::RestApi
Properties:
Name: SFTP Custom ID Provider
FailOnWarnings: true
EndpointConfiguration:
Types:
- PRIVATE
VpcEndpointIds:
- Ref: APIVPCEndpoint
但是,通过此设置,API 网关的 DNS 名称不再在 DNS 中解析,并且我的 SFTP 实例无法访问它。我收到一个错误:
{
"Response": "",
"StatusCode": 0,
"Message": "Unable to call identity provider: Unable to execute HTTP request: randomname.execute-api.us-east-1.amazonaws.com: Name or service not known",
"Url": "https://blablabla.execute-api.us-east-1.amazonaws.com/prod/servers/s-blablablabla/users/myusername/config"
}
我验证dig
了nslookup
DNS 确实没有解析。解决的是端点的名称,但是,当我尝试将该名称粘贴到 AWS 传输控制台中作为我的自定义身份提供商的调用 URL 时,我收到另一个错误:
Failed to edit server details: Invalid API Gateway endpoint
我有一种感觉,我已经进入了“不支持的配置”领域,现在我要将 API 网关移出 VPC 并再次将其公开,以便系统正常工作。但是,如果有人这样做并有任何建议,我很想看看我是否可以让私有配置正常工作。
我们只是尝试做一些类似的事情(面向互联网的 SFTP 服务器,由 VPC 托管,并使用私有 API Gateway + Lambda 作为自定义身份提供者)并从 Amazon 直接确认 API Gateway 终端节点在这种情况下当前必须是区域性的(至少现在)。我们要求他们在文档中澄清这一点,并将其添加到他们的路线图中;当他们更新文档时,我会尝试更新此响应。
事实证明,我们用例的正确答案是根本没有 Lambda 调用刷新缓存 API。2020 年 6 月,AWS 向文件网关添加了一个有针对性的自动缓存刷新选项:
选项范围从 1 分钟到几天。我把我们的时间设置为五分钟,我敢打赌这对我们来说没问题。
参考:https ://aws.amazon.com/blogs/storage/automating-cache-refresh-process-for-file-gateway-on-aws-storage-gateway/