1. はじめに
個人プロジェクトでAWSでインフラを構築してた際にプライベートサブネットからDynamoDBに接続する構成を作成しました。
プライベートサブネットからVPCを接続するには、VPCエンドポイントを作成してVPC外のAWSサービスにアクセスする必要があります。
VPCエンドポイントを通してVPC外のAWSサービスにアクセスする方法を解説します。
※ NatGatewayを利用する方法がありますが、ここでは対象外とします。
2. なぜVPCエンドポイントを利用するのか
VPC のプライベートサブネットからVPC外のリソースにアクセスするには、VPCエンドポイントを作成することで可能です。
なぜVPCエンドポイントが必要かというと、プライベートサブネットからVPC外部のAWSサービスにアクセスするための経路がないためです。
2.1 そもそもVPCエンドポイントとは
VPCエンドポイントとは、AWSのVPCから、インターネットを経由せずにAWSサービスに安全にアクセスできる仕組みです。
VPCエンドポイントはインターフェース型とゲートウェイ型があります。
DynamoDBとS3はゲートウェイ型で、それ以外のAWSサービスはインターフェース型です。
2.2 インターフェース型エンドポイント
ENI(Elastic Network Interface)を使って、VPC内にENI(仮想ネットワークインターフェース)を作成し、対象のサービスにアクセスします。
- 特徴
- 多くのAWSサービスに対応している
- エンドポイントはVPC内にENIとして作成され、プライベートIPが割り当てられる。
- セキュリティグループを設定できる。
2.3 ゲートウェイ型エンドポイント
VPCルートテーブルを使用して、特定のAWSサービス(現在はS3とDynamoDBのみ)にゲートウェイ経由でアクセスします。
- 特徴
- S3, DynamoDBに対応します。
- ルートテーブルにターゲットとして設定する。
- セキュリティグループは使えないが、エンドポイントポリシーでアクセス制御が可能です。
3. 構成図
プライベートサブネットのECSからDynamoDBへアクセスする図です。
4. 実際の手順
ここでは、VPCの作成からエンドポイントの作成までの手順を書いていきます。
- ゲートウェイエンド型ポイントを通してDynamoDB接続に必要なリソース
- VPC
- プライベートサブネット
- ルートテーブル
- VPCエンドポイント
VPCを作成する。
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 192.168.0.0/20
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: 'vpc'
プライベートサブネットを作成する。
PrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
AvailabilityZone: !Select [0, !GetAZs '']
CidrBlock: 192.168.0.0/23
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: 'ecs-private-subnet'
ルートテーブルを作成する。
EcsPrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: VPC
Tags:
- Key: Name
Value: 'ecs-private-route-table'
EcsPrivateSubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PrivateSubnet
RouteTableId: !Ref EcsPrivateRouteTable
VPCエンドポイントを作成する
DynamoDbVPCEndpoint:
Type: AWS::EC2::VPCEndpoint
DependsOn: EcsPrivateRouteTable
Properties:
ServiceName: !Sub 'com.amazonaws.${AWS::Region}.dynamodb'
VpcId: !Ref GymManagementVPC
VpcEndpointType: Gateway
RouteTableIds:
- !Ref PrivateRouteTable
Tags:
- Key: Name
Value: 'dynamodb-vpc-endpoint'
※ ゲートウェイ型エンドポイントは、セキュリティグループは不要です。
※ ゲートウェイ型エンドポイントは、ルートテーブルが必要です。逆にインターフェース型エンドポイントはルートテーブルが必要です。
5. まとめ
VPCエンドポイントは、プラーベートサブネットに作成したECS,Lambda等からVPC外のAWSリソースにアクセスするために利用するサービスで、 AWSのネットワークを構築するためには必須のリソースです。
VPC外のAWSリソースにアクセスするにはVPCエンドポイント以外にもNatGatewayとインターネットゲートウェイを利用してVPC外のリソースにアクセスすることが可能です。
この2つの方法は、両者メリット、デメリットがあり、要件に応じて使い分けが必要です。
次回、プライベートサブネットからNatgatewayを利用したVPC外のAWSリソースについて説明していきたいと思います。