在 Cloud Formation 中为 SQS 创建 VPC 接口终端节点

Yel*_*low 3 amazon-web-services aws-cloudformation amazon-vpc

我想知道是否可以在我的 CloudFormation 文件中创建一个资源来为 SQS 创建一个 VPC 端点。我能够为 SQS 和 DynamoDB 执行此操作,但我相信这是因为它们是网关端点。

现在,我已将我的 SQS 资源定义为:

SQSEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal: '*'
            Action:
              - 'sqs:*'
            Resource:
              - '*'
      ServiceName: !Join 
        - ''
        - - com.amazonaws.
          - !Ref 'AWS::Region'
          - .sqs
      SubnetIds:
        - !Ref PrivateSubnet
        - !Ref PublicSubnet
      VpcId: !Ref 'VPC'
      VpcEndpointType: Interface
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试创建堆栈时,出现错误:

在此处输入图片说明

从 AWS 上阅读这篇博文似乎是可能的。虽然我找不到任何示例或文档。有任何想法吗?

Yel*_*low 5

我想通了,对于使用网关端点的 DynamoDB 和 S3,PolicyDocument必须定义属性。对于所有其他服务,这不需要定义。所以对于 SQS 来说,只需要:

 SQSEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Join 
        - ''
        - - com.amazonaws.
          - !Ref 'AWS::Region'
          - .sqs
      SubnetIds:
        - !Ref PrivateSubnet
        - !Ref PublicSubnet
      VpcId: !Ref 'VPC'
      VpcEndpointType: Interface
Run Code Online (Sandbox Code Playgroud)

编辑: 仍然无法正常工作,即使设置了接口端点,我也必须:

  1. PrivateDnsEnabled属性设置为,true以便您可以像 AWS CLI 使用公共端点一样使用 AWS CLI,并设置PrivateDnsEnabled允许私有端点自动映射到公共端点

  2. 将 设置SecurityGroupsIds为具有允许来自您的 VPC 的入站流量的安全组。如果设置了此实例,则使用默认安全组,它只允许来自具有默认安全组的源的入站流量,这意味着SQS将无法将流量发送回您的实例

所以总结一下:

  SQSEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Join 
        - ''
        - - com.amazonaws.
          - !Ref 'AWS::Region'
          - .sqs
      SubnetIds:
        - !Ref PrivateSubnet
      VpcId: !Ref 'VPC'
      VpcEndpointType: Interface
      SecurityGroupIds:
        - !Ref PrivateSubnetInstanceSG # has to allow traffic from your VPC
      PrivateDnsEnabled: true
Run Code Online (Sandbox Code Playgroud)