Amazon API Gateway
開発者ガイド

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

Amazon API Gateway を使用すると、インターフェイス VPC エンドポイントを使用する Amazon Virtual Private Cloud (VPC) からしかアクセスできないプライベート REST API を作成できます。インターフェイス VPC エンドポイントは、VPC 内に作成するエンドポイントネットワークインターフェイス (ENI) です。 リソースポリシーを使用して、選択した VPC および VPC エンドポイント (複数の AWS アカウント含む) から API へのアクセスを許可または拒否できます。各エンドポイントを使用して複数のプライベート API にアクセスできます。AWS Direct Connect を使用して、オンプレミスネットワークから Amazon VPC に接続を確立し、その接続経由でプライベート API にアクセスすることもできます。いずれの場合も、プライベート API へのトラフィックは安全な接続を使用し、Amazon のネットワークの外には出ません。パブリックインターネットからは隔離されています。

プライベート API へのアクセスには、次の図に示すように、API Gateway 用のインターフェイス VPC エンドポイントを経由します。プライベート DNS が有効になっている場合は、プライベートまたはパブリック DNS 名を使用して API にアクセスできます。プライベート DNS が無効になっている場合は、パブリック DNS 名のみを使用できます。

注記

API Gateway プライベート API は、TLS 1.2 のみをサポートします。以前の TLS バージョンはサポートされていません。


            プライベート DNS を有効にしたプライベート API へのアクセス

概要レベルでは、プライベート API を作成する手順は次のとおりです。

  1. まず、API 実行用に API Gateway コンポーネントサービスのインターフェイス VPC エンドポイント (execute-api といいます) を VPC 内に作成します。

  2. プライベート API を作成してテストします。

    1. 次のいずれかの手順に従って API を作成します。

    2. VPC エンドポイントにアクセス権限を付与するには、リソースポリシーを作成して API にアタッチします

    3. API をテストします

注記

次の手順では、完全に設定された VPC が既にあることを前提としています。VPC の詳細を確認したり、作成を開始したりするには、Amazon VPC ユーザーガイド の「Amazon VPC の開始方法」を参照してください。

API Gateway execute-api のインターフェイス VPC エンドポイントの作成

API 実行の API Gateway コンポーネントサービスは execute-api と呼ばれます。プライベート API がデプロイされた後、それにアクセスするには、VPC でインターフェイス VPC エンドポイントを作成する必要があります。

VPC エンドポイントを作成すると、複数のプライベート API へのアクセスに使用することができます。

API Gateway execute-api のインターフェイス VPC エンドポイントを作成するには

  1. https://console.aws.amazon.com/vpc/ で Amazon VPC コンソールにログインします。

  2. ナビゲーションペインで、[エンドポイント]、[エンドポイントの作成] の順に選択します。

  3. [サービスカテゴリ] で、[AWS サービス] が選択されていることを確認します。

  4. [サービス名] で、接続するリージョンを含む API Gateway サービスエンドポイントを選択します。これは com.amazonaws.region.execute-api という形式になります。たとえば、com.amazonaws.us-east-1.execute-api です。

    [タイプ] で、タイプが [インターフェイス] になっていることを確認します。

  5. 以下の情報を入力します。

    • [VPC] で、エンドポイントを作成する VPC を選択します。

    • [サブネット] で、エンドポイントネットワークインターフェイスを作成する先のサブネット (アベイラビリティーゾーン) を選択します。

      注記

      AWS の一部のサービスは、一部のアベイラビリティーゾーンでサポートされていない場合があります。

    • [プライベート DNS 名を有効にする] で、オプションとしてインターフェイスエンドポイントのプライベート DNS を有効にするチェックボックスを選択できます。

      プライベート DNS を有効にすることを選択した場合、API にプライベートまたはパブリック DNS を経由してアクセスできます。(この設定は、API にアクセスできるユーザーには影響を与えません。使用できる DNS アドレスにのみ関係します。) ただし、プライベート DNS を有効にした API Gateway VPC エンドポイントを使用して、VPC からパブリック API にアクセスすることはできません。これらの DNS 設定は、エッジ最適化されたカスタムドメイン名を使用してパブリック API にアクセスする場合、VPC からこれらのパブリック API を呼び出す機能には影響しません。エッジ最適化されたカスタムドメイン名を使用してパブリック API にアクセスする (プライベート DNS を使用してプライベート API にアクセスする) 方法は、プライベート DNS を有効にしてエンドポイントを作成した VPC からパブリック API とプライベート API の両方にアクセスする方法の 1 つです。

      注記

      プライベート DNS を有効にすることが推奨されます。プライベート DNS を有効にしないことを選択した場合、API にはパブリック DNS を経由でのみアクセスできます。

      オプションとしてプライベート DNS を使用するには、VPC の enableDnsSupport および enableDnsHostnames 属性を true に設定する必要があります。詳細については、Amazon VPC ユーザーガイド の「VPC の DNS サポート」および「VPC の DNS サポートを更新する」を参照してください。

    • [セキュリティグループ] で、VPC エンドポイントネットワークインターフェイスに関連付けるセキュリティグループを選択します。

      選択したセキュリティグループでは、VPC の IP 範囲または VPC 内の別のセキュリティグループのいずれかからの TCP ポート 443 インバウンド HTTPS トラフィックを許可するように設定する必要があります。

  6. [Create endpoint (エンドポイントの作成)] を選択します。

API Gateway コンソールを使用してプライベート API を作成する

API Gateway コンソールを使用してプライベート API を作成するには

  1. API Gateway コンソールにサインインし、[+ API の作成] を選択します。

  2. [新しい API の作成] で、[新しい API] オプションを選択します。

  3. [API 名] に名前 (Simple PetStore (Console, Private) など) を入力します。

  4. [Endpoint Type (エンドポイントタイプ)] で、Private を選択します。

  5. [Create API (API の作成)] を選択します。

ここから、「HTTP カスタム統合で API を作成する」のステップ 1~6 で説明されているように、API のメソッドとその関連する統合をセットアップできます。

注記

API に VPC または VPC エンドポイントに対するアクセス権限を付与するリソースポリシーがない場合、すべての API コールは失敗します。API をテストおよびデプロイする前に、リソースポリシーを作成して API にアタッチする必要があります (「プライベート API のリソースポリシーをセットアップする」を参照)。

AWS CLI を使用してプライベート API を作成する

AWS CLI を使用してプライベート API を作成するには、create-rest-api コマンドを呼び出します。

aws apigateway create-rest-api \ --name 'Simple PetStore (AWS CLI, Private)' \ --description 'Simple private PetStore API' \ --region us-west-2 \ --endpoint-configuration '{ "types": ["PRIVATE"] }'

呼び出しに成功すると、次のような出力が返されます。

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Simple private PetStore API", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (AWS CLI, Private)" }

ここから、「AWS CLI コマンドを使用してエッジ最適化された API をセットアップする」で説明している同様の手順に従って、この API のメソッドと統合を設定できます。

API をテストする際は、「プライベート API のリソースポリシーをセットアップする」で説明されているように、リソースポリシーが作成され API にアタッチされていることを確認してください。

AWS SDK for JavaScript を使用してプライベート API を作成する

AWS SDK for JavaScript を使用してプライベート API を作成するには:

apig.createRestApi({ name: "Simple PetStore (node.js SDK, private)", endpointConfiguration: { types: ['PRIVATE'] }, description: "Demo private API created using the AWS SDK for node.js", version: "0.00.001" }, function(err, data){ if (!err) { console.log('Create API succeeded:\n', data); restApiId = data.id; } else { console.log('Create API failed:\n', err); } });

呼び出しに成功すると、次のような出力が返されます。

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Demo private API created using the AWS SDK for node.js", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (node.js SDK, private)" }

ここまでの手順を完了したら、「Node.js の AWS SDK を使用してエッジ最適化された API をセットアップする」の手順に従って、この API のメソッドと統合を設定できます。

API をテストする際は、「プライベート API のリソースポリシーをセットアップする」で説明されているように、リソースポリシーが作成され API にアタッチされていることを確認してください。

プライベート API のリソースポリシーをセットアップする

プライベート API にアクセスするには、リソースポリシーを作成して API にアタッチする必要があります。これにより、VPC および VPC エンドポイント、または明示的にアクセス権限を付与された別の AWS アカウントの VPC および VPC エンドポイントから API へのアクセス権限が付与されます。

これを行うには、「API Gateway リソースポリシーを作成して API にアタッチする」の手順に従います。ステップ 4 では、[Source VPC Whitelist (ソース VPC ホワイトリスト)] の例を選択します。{{vpceID}} (中括弧を含む) を使用する VPC エンドポイント ID に置き換え、[Save (保存)] を選択してリソースポリシーを保存します。

API Gateway コンソールを使用してプライベート API をデプロイする

プライベート API をデプロイするには、API Gateway コンソールで以下を実行します。

  1. 左ナビゲーションペインで API を選択し、[アクション] ドロップダウンメニューから [API のデプロイ] を選択します。

  2. [API のデプロイ] ダイアログで、ステージ (または、API の最初のデプロイの場合は [New Stage]) を選択し、名前 (例: 「test」、「prod」、「dev」など) を [ステージ名] 入力フィールドに入力します。オプションで、[ステージの説明] または [デプロイメントの説明] (あるいはその両方) に説明を入力し、[デプロイ] を選択します。

プライベート API 開発に関する考慮事項

  • 既存のパブリック API (リージョンまたはエッジ最適化) をプライベート API に変換できます。また、プライベート API をリージョン API に変換できます。プライベート API をエッジ最適化 API に変換することはできません。詳細については、「API Gateway で API エンドポイントタイプを変更する (パブリックまたはプライベート)」を参照してください。

  • プライベート API へのアクセス権限を VPC および VPC エンドポイントに付与するには、リソースポリシーを作成して、新しく作成された (または変換された) API にアタッチする必要があります。これを行わないと、API へのすべての呼び出しは失敗します。詳細については、「プライベート API のリソースポリシーをセットアップする」を参照してください。

  • カスタムドメイン名はプライベート API ではサポートされていません。

  • 単一の VPC エンドポイントを使用して複数のプライベート API にアクセスできます。

  • プライベート API の VPC エンドポイントには、他のインターフェイス VPC エンドポイントと同じ制限が適用されます。詳細については、Amazon VPC ユーザーガイド の「インターフェイスエンドポイントのプロパティと制限」を参照してください。