話題の記事

PrivateLinkがリリースし新たにEC2, Systems Manager, ELB, Kinesis, Service CatalogがVPCエンドポイントに対応しました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

VPCエンドポイントはAWSへのAPIアクセスがインターネットに出ずに行える機能ですが、先程EC2、ELB、Kinesis、Service Catalog、Systems Managerが新たに対応したのでまとめてみます。

VPCエンドポイントのアップデート

VPCエンドポイントに追加されたサービス

VPCエンドポイントに対応するサービスは、今回のアップデートで以下のようになりました。Key Management Service(KMS)やCloudwatchももうすぐ対応するそうです。対応しているリージョンは中国(北京)を除くリージョンで使用できます。

  • S3
  • com.amazonaws.ap-northeast-1.s3 : Gateway
  • DynamoDB
  • com.amazonaws.ap-northeast-1.dynamodb : Gateway
  • EC2 <- New!
  • com.amazonaws.ap-northeast-1.ec2 : Interface
  • Systems Manager <- New!
  • com.amazonaws.ap-northeast-1.ec2messages : Interface
  • com.amazonaws.ap-northeast-1.ssm : Interface
  • ELB <- New!
  • com.amazonaws.ap-northeast-1.elasticloadbalancing : Interface
  • Kinesis Stream <- New!
  • com.amazonaws.ap-northeast-1.kinesis-streams : Interface
  • Service Catalog <- New!
  • com.amazonaws.ap-northeast-1.servicecatalog : Interface
  • KMS <- Coming soon!
  • CloudWatch <- Coming soon!

料金

料金は、AZごとの1時間あたりの料金と1GBの処理ごとの料金で決まります。

リージョン AZごとのVPCエンドポイントの料金 ($/時) 1GBのデータ処理あたりの料金 ($)
米国東部 (バージニア北部) 0.01 0.01
米国東部 (オハイオ) 0.01 0.01
米国西部 (オレゴン) 0.01 0.01
米国西部 (北カリフォルニア) 0.011 0.01
カナダ (中部) 0.011 0.01
EU (アイルランド) 0.011 0.01
EU (ロンドン) 0.011 0.01
EU (フランクフルト) 0.012 0.01
アジアパシフィック (シンガポール) 0.013 0.01
アジアパシフィック (東京) 0.014 0.01
アジアパシフィック (ソウル) 0.013 0.01
アジアパシフィック (シドニー) 0.013 0.01
アジアパシフィック (ムンバイ) 0.013 0.01
南米 (サンパウロ) 0.021 0.01

VPCエンドポイントの方式

ゲートウェイVPCエンドポイント(既存方式)

VPCエンドポイントは、今までS3とDynamoDBが対応していました。仕組みは下図のようにVPCのルートテーブルを書き換えてインターネットゲートウェイでなくVPCエンドポイントのゲートウェイ経由でAWSのAPIエンドポイントへアクセスしていました。今回この方式はゲートウェイVPCエンドポイントと呼ばれるようになりました。ゲートウェイVPCエンドポイントではAWSのAPIへはパブリックIPへ向いており、アクセス制御はゲートウェイのアクセスポリシーで行います。

Gateway VPC Endpoints (1)

インターフェイスVPCエンドポイント(新方式)

今回追加されたものは、下図のようにサービスのエンドポイントとENIをPrivateLinkと呼ばれるものでリンクされます。DNSを使ってENIのプライベートIPに&lt;サービス名&gt;.&lt;リージョン&gt;.amazonaws.comのようなAレコードが設定されます。この方式をインターフェイスVPCエンドポイントと呼びます。インターフェイスVPCエンドポイントではENIに対してアクセスするため、アクセス制御はセキュリティグループで行います。

Interface VPC Endpoints (4)

試してみる

VPCコンソールでメニューのエンドポイントからCreate Endpointをクリックします。

Endpoints___VPC_Management_Console

8種類のサービスが並びます。ここではSystems Managerを利用するためcom.amazonaws.ap-northeast-1.ssmを選択します。

Create_Endpoint___VPC_Management_Console

VPCエンドポイントを設定するVPCを選択して、ENIを配置するサブネットを選択します。APIへのアクセスで通常のエンドポイント名を使用するためEnable for this endpointにチェックを入れます。ENIに設定するセキュリティグループも選択します。設定をしたらCreate endpointをクリックします。

なお、通常のエンドポイント名を利用する(Enable for this endpointをチェックする)ためにはVPCの設定でDNS 解決DNS ホスト名を有効にしなければなりませんのでご注意下さい。

Create_Endpoint___VPC_Management_Console

しばらく経つとStatusがavailableになります。DNS Namesを見ると、通常のエンドポイントであるssm.ap-northeast-1.amazonaws.com以外に、オリジナルのDNS名である&lt;エンドポイントID&gt;-XXXXXXXX.ssm.&lt;リージョン&gt;.vpce.amazonaws.comや、各AZに対する&lt;エンドポイントID&gt;-XXXXXXXX-.ssm.ap-northeast-1.vpce.amazonaws.comもあります

Endpoints___VPC_Management_Console

配置したVPCのEC2にログインして確認してみます。ここではAmazon Linux 2017.09.1を使用しています。

Systems ManagerのエンドポイントのIPアドレスをdigコマンドで確認してみます。すると10.10.17.7810.10.16.175となりプライベートIPに向いていることがわかります。

$ dig ssm.ap-northeast-1.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> ssm.ap-northeast-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65081
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ssm.ap-northeast-1.amazonaws.com. IN	A

;; ANSWER SECTION:
ssm.ap-northeast-1.amazonaws.com. 60 IN	A	10.10.17.78
ssm.ap-northeast-1.amazonaws.com. 60 IN	A	10.10.16.175

;; Query time: 3 msec
;; SERVER: 10.10.0.2#53(10.10.0.2)
;; WHEN: Wed Nov  8 22:52:49 2017
;; MSG SIZE  rcvd: 82

Systems Managerを使用してみます。普通に利用できます。

$ aws ssm describe-instance-information --region ap-northeast-1
{
    "InstanceInformationList": [
        {
            "IsLatestVersion": false,
            "PingStatus": "Online",
            "InstanceId": "i-1a2b3c4d5e6f7g8h9",
            "AgentVersion": "2.1.4.0",
            "PlatformVersion": "2017.09",
            "PlatformName": "Amazon Linux AMI",
            "PlatformType": "Linux",
            "LastPingDateTime": 1510182372.31
        }
    ]
}

次にインターフェイスVPCエンドポイントのセキュリティグループでEC2からのアクセスを拒否してから、もう一度実行してみます。10分ほど待ってエラーが発生します。

$ aws ssm describe-instance-information --region ap-northeast-1

HTTPSConnectionPool(host='ssm.ap-northeast-1.amazonaws.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<botocore.awsrequest.AWSHTTPSConnection object at 0x7f888f15b490>, 'Connection to ssm.ap-northeast-1.amazonaws.com timed out. (connect timeout=60)'))

さいごに

今回の対応でVPCエンドポイントに対応したサービスが大幅に増加しました。さらにもうすぐCloudWatchとKMSも対応される予定です。今までとは異なるインターフェイスVPCエンドポイントによってアクセス制御が異なるので、設定方法を理解して使用しましょう。