よく使いそうなインターフェイスVPCエンドポイントをCloudFormationで一撃設定する
こんにちは、コカコーラ大好きカジです。
インターフェイスVPCエンドポイントをVPC構築済みの環境や、複数VPCに構築するときに使えるCloudFormationテンプレートを作成してみました。
インターフェイスVPCエンドポイントをご存知ですか?不明の方は、以下のブログにわかりやすく記載があるので参照してください。
PrivateLinkがリリースし新たにEC2, Systems Manager, ELB, Kinesis, Service CatalogがVPCエンドポイントに対応しました
CloudWatch が VPC Endpoint に対応!プライベートサブネットからカスタムメトリクスが PUTできます
よく使いそうな、以下のエンドポイントを一撃で構築します。 他のエンドポイントにも流用できると思いますので、どなたかのお役に立てれば光栄です。
- Cloudwatch
- Cloudwatch Events
- Cloudwatch Logs
- KMS
- SSM
- KMS
- ECR
前提条件
以下のリソースがが作成済みであること
- VPC
- サブネット
- インターフェイスVPCエンドポイントが利用するセキュリティグループ(VPC内の必要なリソースからのアクセス許可が良いと思います。)
インターフェイスVPCエンドポイントの構築
文末のCloudFormationテンプレートでCreate Stackしてください。 Crate Stack時に、VPC、Subnet、Security Groupを指定するようにしています。そのほかはそのままでOKです。
そのまま次へ
スタックの作成を行います。
作成中の状況
作成完了の状況
VPCのコンソールの結果
CloudFormationテンプレート
sample-InterfaceEndpoint-template.yaml
AWSTemplateFormatVersion: '2010-09-09' # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Parameters: #VPCID VpcId: Description : "VPC ID" Type: AWS::EC2::VPC::Id #InterfaceSubnet1 InterfaceSubnetId1: Description : "Interface Subnet 1st" Type : AWS::EC2::Subnet::Id #InterfaceSubnet2 InterfaceSubnetId2: Description : "Interface Subnet 2st" Type : AWS::EC2::Subnet::Id #Interface Security Group InterfaceSecurityGroupId: Type: AWS::EC2::SecurityGroup::Id # ------------------------------------------------------------# # Create Logs End Point # ------------------------------------------------------------# Resources: logsEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .logs SubnetIds: - !Ref InterfaceSubnetId1 - !Ref InterfaceSubnetId2 VpcId: !Ref 'VpcId' VpcEndpointType: Interface SecurityGroupIds: - !Ref InterfaceSecurityGroupId PrivateDnsEnabled: true # ------------------------------------------------------------# # Create monitoring End Point # ------------------------------------------------------------# MonitoringEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .monitoring SubnetIds: - !Ref InterfaceSubnetId1 - !Ref InterfaceSubnetId2 VpcId: !Ref 'VpcId' VpcEndpointType: Interface SecurityGroupIds: - !Ref InterfaceSecurityGroupId PrivateDnsEnabled: true # ------------------------------------------------------------# # Create events End Point # ------------------------------------------------------------# eventsEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .events SubnetIds: - !Ref InterfaceSubnetId1 - !Ref InterfaceSubnetId2 VpcId: !Ref 'VpcId' VpcEndpointType: Interface SecurityGroupIds: - !Ref InterfaceSecurityGroupId PrivateDnsEnabled: true # ------------------------------------------------------------# # Create ssm End Point # ------------------------------------------------------------# ssmEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .ssm SubnetIds: - !Ref InterfaceSubnetId1 - !Ref InterfaceSubnetId2 VpcId: !Ref 'VpcId' VpcEndpointType: Interface SecurityGroupIds: - !Ref InterfaceSecurityGroupId PrivateDnsEnabled: true # ------------------------------------------------------------# # Create kms End Point # ------------------------------------------------------------# kmsEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .kms SubnetIds: - !Ref InterfaceSubnetId1 - !Ref InterfaceSubnetId2 VpcId: !Ref 'VpcId' VpcEndpointType: Interface SecurityGroupIds: - !Ref InterfaceSecurityGroupId PrivateDnsEnabled: true # ------------------------------------------------------------# # Create ecr End Point # ------------------------------------------------------------# ecrEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .ecr.dkr SubnetIds: - !Ref InterfaceSubnetId1 - !Ref InterfaceSubnetId2 VpcId: !Ref 'VpcId' VpcEndpointType: Interface SecurityGroupIds: - !Ref InterfaceSecurityGroupId PrivateDnsEnabled: true