kawabatas技術ブログ

試してみたことを書いていきます

Amazon API Gateway でプライベート API を作成する

概要

Amazon API Gateway でプライベート API を作成した際のメモ。

AWS ドキュメント

VPC エンドポイントの作成

サービス -> VPC -> エンドポイントでエンドポイント作成。

サービスカテゴリ「AWS サービス」

サービス名「com.amazonaws.<リージョン名>.execute-api

f:id:kawabatas:20190123134420p:plain

VPC、サブネットを選択し、プライベート DNS 名を有効にする。

セキュリティグループは、インバウンドで HTTPS TCP 443 を許可しておく。

API の作成

エンドポイントタイプ「プライベート」

f:id:kawabatas:20190123135052p:plain

作成したら、アクセスするURLのサブドメインを確認する。APIのリソース(XXXX)のXXXX部分。

f:id:kawabatas:20190123135433p:plain

リソースポリシー設定

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:<リージョン名>:<アカウントID>:*/*"
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:sourceVpce": "<VPCエンドポイントのID>"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:<リージョン名>:<アカウントID>:*/*"
        }
    ]
}

確認

VPC内にEC2インスタンスを作成し、curl

$ curl https://XXXXXX.execute-api.<リージョン名>.amazonaws.com/Prod/hello
Hello,

手元のPCからcurl

$ curl https://XXXXXX.execute-api.<リージョン名>.amazonaws.com/Prod/hello
curl: (6) Could not resolve host: XXXXXXXXXXXXXX