Application Load Balancer または Network Load Balancer を使用して API Gateway プライベート API を呼び出すにはどうすればよいですか?

所要時間3分
0

Amazon API Gateway のプライベート API をロードバランサーの背後にあるターゲットとして設定したいと考えています。次に、AWS アカウントを使用して、Application Load Balancer または Network Load Balancer からプライベート API にアクセスしたいと考えています。

簡単な説明

AWS Direct Connect または Amazon Route 53 を使用してプライベート API にアクセスするには、「プライベート API を呼び出す方法」を参照してください。インターフェイス VPC エンドポイントを使用して、別の AWS アカウントの API Gateway プライベート REST API にアクセスすることもできます。

次に示す解決方法では、Amazon Virtual Private Cloud (Amazon VPC) エンドポイントの Elastic Network Interface の IP アドレスを使用します。この IP アドレスを使用し、プライベート API をターゲットとしてロードバランサーに追加します。

**重要:**API Gateway ではプライベート API のカスタムドメイン名はサポートされていません。この問題の解決方法としては、まず、ドメインを呼び出し、ロードバランサーにアタッチします。そして、次の設定を使用してプライベート API を呼び出します。

解決策

Amazon VPC エンドポイントを作成する

  1. Amazon VPC コンソールを開きます。

  2. [エンドポイント] を選択し、[エンドポイントの作成] を選択します。
    注: API execute-api を使用して VPC 内に Amazon VPC エンドポイントが既に設定されている場合は、プライベート DNS をオフにします。

  3. [サービス] に対して、com.amazonaws.com.your-region.execute-api を選択します。

  4. [VPC] で、貴社の Amazon VPC を選択します。

  5. [サブネット] に対して、異なるアベイラビリティーゾーン (AZ ID) にある 2 つのサブネットを選択して、[エンドポイントの作成] を選択します。

  6. エンドポイントを選択し、[サブネット] を選択して、IP アドレスをコピーします。

詳細については、「](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html#apigateway-private-api-create-interface-vpc-endpoint)API Gateway execute-api 用のインターフェイス VPC エンドポイントの作成[」を参照してください。

プライベート REST API を作成して、Amazon VPC エンドポイントにアクセス許可を付与する

  1. API Gateway コンソールを開き、[API の作成] を選択します。

  2. [REST API]で、[ビルド] を選択します。

  3. [設定] には、次の情報を入力します。
    [API 名] に、API 名を入力します。
    [エンドポイントタイプ] に、[プライベート] を選択します。
    [エンドポイント ID] には、作成されたエンドポイント ID を入力します。

  4. [API の作成] を選択します。

5.    ナビゲーションペインで、[リソースポリシー] を選択します。

  1. リソースポリシーエディタに、次のポリシーを貼り付けます。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-081234d1ad408e"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/*/*"
    }
  ]
}

**注:**vpce-081234d1ad408e を VPC エンドポイント ID に置き換えます。arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID と API の ARN を置き換えます。

  1. [保存] を選択します。

詳細については、「API Gateway コンソールを使用したプライベートAPIの作成」を参照してください。

AWS 証明書マネージャーのパブリック認証を作成またはインポートする

公開証明書をリクエストするか、証明書をインポートします。

Application Load Balancer または Network Load Balancer の作成

Application Load Balancer を作成するか、Network Load Balancer を作成します。

ターゲットグループを作成する

1.    Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。

  1. ナビゲーションペインの [ロードバランシング] で、**[ロードバランサー] ** を選択し、 [ターゲットグループ] を選択します。

  2.    **[ターゲットグループの作成]** を選択します。
    
  3. [ターゲットタイプ] に対して [IP アドレス] を選択します。

  4. [ターゲットグループ名] に名前を入力します。

Application Load Balancer

[プロトコル] に、[HTTP] を選択します。
[ポート] には、 [443] を選択します。
[VPC] で、[VPC] を選択します。
[ヘルスチェックパス] に「200,403」と入力すると、ターゲットグループ内で VPC エンドポイントに [正常] と表示されます。

Network Load Balancer

[プロトコル] で、[TLS] を選択します。
[ポート] には、 [443] を選択します。
[VPC] で、[VPC] を選択します。

6.    [次へ] を選択します。

  1. [IP の指定] で、[インターフェイス Amazon VPC エンドポイントを作成する] セクションでコピーされた IP アドレスを入力し、[IPv4 アドレスの追加] を選択します。

  2. [ターゲットグループの作成] を選択します。

ロードバランサーの構成

1.    EC2 コンソールを開きます。

  1. ナビゲーションペインの [ロードバランサー] を選択し、 [ロードバランサーの作成] を選択します。

Application Load Balancer

[スキーム] では、構成に応じて [インターネット向け] または [社内向け] を選択します。
[プロトコル] に、[HTTP] を選択します。
[VPC] と**[サブネット]** では、ご使用の VPC とサブネットを選択します。

Network Load Balancer

[スキーム] で、構成に応じて [インターネット向け] または [社内向け] を選択します。
[プロトコル] で、[TLS] を選択します。
[VPC] と**[サブネット]** では、ご使用の VPC とサブネットを選択します。
[セキュリティ ポリシー] で、既定のポリシー [ELBSecurityPolicy-TLS (recommended)] を選択します。
[デフォルト SSL/TLS 証明書] では、[ACM から] を選択します。
[証明書の選択] ドロップダウンメニューを選択し、証明書を選択します。

  1. [ロードバランサーを作成する] を選択します。

注:ロードバランサーのターゲットは、VPC エンドポイントが作成した Elastic Network Interface の IP アドレス内にあります。この Elastic Network Interface を見つけるには、VPC エンドポイントを選択して、[サブネット] タブを開いてください。

Amazon Route 53 パブリックまたはプライベートホストゾーン内へのレコードの作成

パブリックホストゾーンを作成するか、プライベートホストゾーンを指定します。

次に、CNAME レコードを作成し、Application Load Balancer または Network Load Balancer に関連付けます。

テスト

パブリックロードバランサーの場合は、ローカルマシンから curl リクエストを実行します。

プライベートロードバランサーの場合は、ロードバランサーのサブネットの 1 つで新しい EC2 インスタンスを起動します。次に、以下のような curl リクエストを行います。

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'Host: <api-id>.execute-api.<region>.amazonaws.com'

-または-

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'x-apigw-api-id:{api-id}'

リクエストが成功すると、200 OK レスポンスコードが返されます。リクエストが失敗すると、403 Forbidden レスポンスコードまたは DNS 解決エラーが返されます。問題が発生したときは、「ロードバランサーのトラブルシューティング」を参照してください。

関連情報

Direct Connect 接続を介してプライベート API ゲートウェイに接続するにはどうすればよいですか。

API Gateway のプライベート API エンドポイントへの接続に関する問題を解決するにはどうすればよいですか。

Amazon CloudWatch メトリックでの REST API のモニタリング

API Gateway の REST API 用の CloudWatch ロギングのセットアップ

コメントはありません

関連するコンテンツ