VPCエンドポイント
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
PrivateLink
AWS PrivateLinkを実現する仕組みがVPC エンドポイント。
例)VPC エンドポイントでlambdaにアクセス
VPC エンドポイントを使ってVPCからlambdaにアクセスするサンプル。
手順

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