LoginSignup
43
50

More than 3 years have passed since last update.

Amazon VPC エンドポイント の GatewayとInterface

Last updated at Posted at 2019-07-16

1.GatewayとInterface

下記の通り、VPCエンドポイントの方式には、GatewayとInterfaceがある。Gatewayはs3とdynamodのみ。
image.png

Gateway

VPCのルートテーブルを書き換えてVPCエンドポイントのゲートウェイ経由でAWSのAPIエンドポイントへアクセスする。
ゲートウェイVPCエンドポイントではAWSのAPIへはパブリックIPへ向いており、*アクセス制御はゲートウェイのアクセスポリシーで行います。

[Feb 2, 2021]S3がInterface型にも対応しました。

Interface

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

比較

Gateway型 PrivateLink(Interface型)
アクセス制御 エンドポイントポリシー。IAM Policyと同じ構文でアクセス先のリソースを制限可能。 セキュリティグループ。セキュリティグループでアクセス元IP、ポートを制御可能。対象のサービスの特定のリソースへのアクセス制御は不可。
利用料金 無料 有料
冗長性 ユーザー側で意識する必要なし マルチAZで配置するように設定する

詳しくは下記のページが参考になりました。

2.Gateway

ここでは、[com.amazonaws.ap-northeast-1.s3]を選択します。
image.png

エンドポイントにアクセスできるVPCとサブネットを指定します。
ここでは、わざとカスタムで特定のバケットに対し、GetとPutのみ許可するようなポリシーを設定しています。詳細は、Amazon S3 のエンドポイントポリシーの使用
を参考にしてください。

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::naata-vpcep",
                   "arn:aws:s3:::naata-vpcep/*"]
    }
  ]
}

image.png

なお、ルートテーブルに以下のとおり、追加されていることがわかります。
image.png

検証してみます。

特定のバケットへのGetとPutのみ許可しているので、これはもちろんアクセスできません。

aws s3 ls --region ap-northeast-1
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

下記のとおり、特定のバケットへのputが成功していることがわかります。

aws s3 cp test.txt s3://naata-vpcep
upload: ./test.txt to s3://naata-vpcep/test.txt

3.Interface

ここでは、プライベートサブネットに配置してあるEC2インスタンスから、sshを利用せずセッションマネージャーを利用して接続したいと思います。

エンドポイントは同じように4つ作成すればよい。
com.amazonaws.ap-northeast-1.ssm
com.amazonaws.ap-northeast-1.ssmmessage
com.amazonaws.ap-northeast-1.ec2
com.amazonaws.ap-northeast-1.ec2messages
Systems Manager 用 VPC エンドポイントを作成する

「com.amazonaws.ap-northeast-1.ssm」を選択します。
image.png

VPCエンドポイントを設定するVPCを選択して、ENIを配置するサブネットを選択します。
[プライベート DNS 名を有効にする]で「このエンドポイントで有効にする」にチェックを入れます。
【注意】
「このエンドポイントで有効にする」でチェックを入れている場合、VPCの設定でDNS 解決DNS ホスト名を有効にしておく必要があります。
image.png
ENIに設定するセキュリティグループを選択します。※対象のEC2からHTTPS(443)を受け取れるセキュリティグループとするのが基本です。
image.png

作成されたら、DNS Namesが3つ作成されと思います。
<エンドポイントID>-XXXXXXXX.ssm.<リージョン>.vpce.amazonaws.com
<エンドポイントID>-XXXXXXXX-.ssm.ap-northeast-1.vpce.amazonaws.com
ssm.ap-northeast-1.amazonaws.com
image.png

セッションマネージャを確認し、接続できるか確認してみましょう。
image.png

コマンドを打てるコンソールまでは開いたが、何も反応しない。。。
image.png

そこで、こちらのページにある内容で解決!
セッションマネージャーのログの出力先として設定されている s3やCloudWatch Logsのロググループの設定を確認し、接続することができた。
image.png

43
50
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
50