#
ドキュメント

Document

自分のための備忘録です。

VPCエンドポイント

Ref.

https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpc-endpoints.html

VPCエンドポイント

VPC エンドポイントを使用すると、Virtual Private Cloud (VPC) とサポートされているサービスの間の接続が有効になります。インターネットゲートウェイ、NAT デバイス、VPN 接続、および AWS Direct Connect 接続は必要ありません。したがって、VPC はパブリックインターネットに公開されません。

https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpc-endpoints.html

要はVPCに属しているリソースからVPCに属していないリソースにプライベートにアクセスするためのもの。

VPC Endpointは、グローバルIPをもつAWSのサービスに対して、VPC内部から直接アクセスするための出口

https://d1.awsstatic.com/webinars/jp/pdf/services/20201021_AWS-BlackBelt-VPC.pdf p.77

VPCエンドポイントの種類

  • インターフェイス型:「インターフェイス型は、それ以降に出てきたサービスで50種類以上のサービスが対応されています。」 https://dev.classmethod.jp/articles/vpc-endpoint-gateway-type/

    インターフェイス型の場合は、ENIを利用してVPC内部にサービスのエンドポイントが立ち上がります。そのため、ネットワークACLでローカルの通信のみに制限しても影響を受けることがありません。

    https://dev.classmethod.jp/articles/vpc-endpoint-gateway-type/ Gateway Load Balancer エンドポイント

  • ゲートウェイ型:S3とDynamoDBが対応
    • VPCエンドポイントのIPはグローバルIP(ちなみにS3側もグローバルIPが振られている)

ref. 2つのVPCエンドポイントの違いを知る

CloudFormation

AWS::EC2::VPCEndpoint

AWS PrivateLinkを実現する仕組みがVPC エンドポイント。

例)VPC エンドポイントでlambdaにアクセス

VPC エンドポイントを使ってVPCからlambdaにアクセスするサンプル。

手順

vpc-endpoint

  1. プライベートサブネットにlambdaを呼び出すインスタンを作成
  2. インスタンスにlambdaを実行するロールを付与
  3. lambdaのエンドポイントを作成(サービス:com.amazonaws.ap-northeast-1.lambda)プライベートサブネットに配置
  4. lambdaを作成(関数名はhello-worldにした)
  5. インスタンスからlambdaを呼び出す

インスタンスにlambdaを実行するロールを付与

  • 許可
  • 信頼関係

許可:

  • AWSLambdaExecute
  • AWSLambdaRole

信頼関係:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

lambdaを作成

ランタイムにNode.js 14.xを選択したときにデフォルトで入力されているサンプルを使用。 関数名はhello-worldにした。

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

インスタンスからlambdaを呼び出す

$ aws --region ap-northeast-1 lambda invoke --function-name hello-world response.json

{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}
EndpointDetails___VPC_Console