Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

Amazon API Gateway でプライベートなAPIを作成できるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2018/06/api-gateway-supports-private-apis/

こちらを試してみたいと思います。

VPCエンドポイントの作成

ローカルAPIへの接続には PriavateLink によるインターフェースVPCエンドポイントを使用します。

image.png
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-private-apis.html

VPC コンソールから エンドポイントの作成へ進み、サービス名の選択で、
com.amazonaws.ap-northeast-1.execute-api を選択します。

image.png

VPC, subnet, セキュリティグループ はそれぞれ任意のものを指定し、エンドポイントの作成を行います。
セキュリティグループ では 443 のインバウンドを許可する必要があります。
プライベートDNS名を有効にする にチェックを入れると
「execue-api.ap-northeast-1.amazonaws.com」のVPC内のルックアップが、
作成するエンドポイントのIPアドレスに解決されます。

image.png

プライベートAPIの作成

API Gateway コンソールから新しい API を作成します。
ここでは APIの例 を使用します。
エンドポイントタイプでプライベートを選択します。

image.png

image.png

作成したAPI(例を使用した場合はPetStore)に以下のようなリソースポリシーを設定します。
{{vpceID}} に作成したVPCエンドポイントのIDを指定します。

policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringEquals": {
                    "aws:sourceVpce": "{{vpceID}}"
                }
            }
        }
    ]
}

リソースポリシーを設定したらAPIをデプロイします。

image.png

プライベートAPIの場合、ステージエディター上で、呼び出し用のURLは表示されません。

image.png

プライベートAPIの呼び出し

プライベートDNSを使用する場合、API は以下の形式で呼び出すことができます。

https://{restapi-id}.execute-api.{region}.amazonaws.com/{stage}
$ curl https://{restapi-id}.execute-api.ap-northeast-1.amazonaws.com/dev/pets/1
{
  "id": 1,
  "type": "dog",
  "price": 249.99
}

DirectConnet経由で接続する場合等は、プライベートDNSを使用できないため、
以下のようにパブリックDNSでAPIを呼び出します。
Hostヘッダで {restapi-id}を含めてリクエストします。

$ curl https://vpce-XXXXXXXXXXXXXXXXX-XXXXXXXX.execute-api.ap-northeast-1.vpce.amazonaws.com/dev/pets/2 -H'Host:{restapi-id}.execute-api.ap-northeast-1.amazonaws.com'
{
  "id": 2,
  "type": "cat",
  "price": 124.99
}

参考:既存APIのエンドポイントタイプ変更

コンソールのAPIリストで歯車ボタンを押すと、作成済みのAPIのエンドポイントタイプを変換できます。
既存のRegional API、Edge Optimized APIをプライベートAPIに変換できます。

image.png

プライベートAPIは Regional APIに変換できますが、Edge Optimized APIに変換できないので注意が必要です。
image.png

以上です。
参考になれば幸いです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away