3

VPC内のラムダ関数からVPC外のキネシスストリームにアクセスしようとしています。現在、キネシスストリームに書き込むコードが実行されるとハングしてからタイムアウトになります。 VPCからラムダを取り除くと、ストリームに書き込むコードが正常に動作します。しかし、私はVPC内のリソースにアクセスし、ストリームに書き込む必要があります。誰でもこれを修正する方法を知っていますか?ここでVPC内のVPC外部のAWSリソースにアクセスする - サーバーレスフレームワーク

はここ

functions: 
    handleChanges: 
    handler: functions/handlers.handleChanges 
    timeout: 10 
    package: 
     include: 
     - functions/utils/** 
    events: 
     - http: 
      method: POST 
      path: "/" 
      integration: lambda 
    vpc: 
     securityGroupIds: 
     - ${file(./private.yml):variables.securityGroup} 
     subnetIds: 
     - ${file(./private.yml):variables.subnetID} 

VPCには私のポリシーここ

iamRoleStatements: 
    - Effect: "Allow" 
    Action: 
     - "kinesis:PutRecord" 
     - "kinesis:GetRecords" 
     - "kinesis:GetShardIterator" 
     - "kinesis:DescribeStream" 
     - "kinesis:ListStreams" 
    Resource: 
     Fn::GetAtt: 
     - KinesisStream 
     - Arn 
    - Effect: "Allow" 
    Action: 
     - "cognito-idp:AdminGetUser" 
    Resource: "*" 
    - Effect: "Allow" 
    Action: 
     - "logs:CreateLogGroup" 
     - "logs:CreateLogStream" 
     - "logs:PutLogEvents" 
     - "ec2:CreateNetworkInterface" 
     - "ec2:DescribeNetworkInterfaces" 
     - "ec2:DeleteNetworkInterface" 
    Resource: "*" 

そして最後になっている私の関数である私のキネシスストリームリソースが

KinesisStream: 
    Type: AWS::Kinesis::Stream 
    Properties: 
    Name: ${self:provider.environment.STREAM_NAME} 
    ShardCount: 1 

答えて

4

で唯一のソリューションですVPCにNAT Gateway(またはNAT instance)を追加して、yプライベートサブネットにあるラムダ機能は、VPC外のリソースにアクセスできます。

+0

回答ありがとうございます。私はちょうどNATゲートウェイを作成し終わったし、今はうまくいくようです。私はプロセスを説明するこの要点につまずいた:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7 –

+0

これを行う可能性のあるセキュリティ上の危険があるかどうか知っていますか? –

+3

@realseanp VPC NATゲートウェイは、外部から開始された接続ではなく、内部で開始された接続のみを許可するため、内部リソースはこの設定を使用して公開されません。本質的に安全でない設定でNATゲートウェイを設定する方法は本質的にありません。 –

関連する問題