API Gateway のバックエンド用クライアント証明書設定の確認

HTTPS バックエンドがクライアント証明書で API Gateway を認証する場合は、ステージとバックエンドを併せて構成してください。

説明

API Gateway ステージの client_certificate_id は、API Gateway が HTTPS バックエンドに提示するクライアント証明書を指定します。バックエンドはこの証明書を検証し、信頼する API Gateway からのリクエストだけを許可できます。

すべてのステージでこの方式が必要なわけではありません。バックエンドが他の適切な認証方式を利用しているか確認し、クライアント証明書に依存する場合は両側を構成してください。API 呼び出し元と Gateway 間の TLS 設定とは区別する必要があります。

想定される影響

  • バックエンドが要求する証明書を提示できないと、正規のリクエストが失敗するおそれがあります。
  • バックエンドが証明書を検証せず、他のアクセス制御も不十分だと、Gateway を経由しないリクエストを許可する可能性があります。

対処方法

  • この方式が必要な場合は、API Gateway で証明書を生成し、その ID を client_certificate_id に設定してください。
  • HTTPS バックエンドに有効なサーバー証明書を構成し、信頼する Gateway のクライアント証明書を検証して他の接続を拒否するよう設定してください。
  • 正常な連携と未承認接続の拒否をテストし、有効期限が切れる前に証明書を交換してください。交換時はバックエンドの信頼設定も更新する必要があります。

例

ステージ設定だけを比較する抜粋です。REST API、デプロイ、HTTPS 連携、バックエンドの証明書検証は別途構成する必要があります。

変更前

hcl
resource "aws_api_gateway_stage" "example" {
  stage_name    = "prod"
  rest_api_id   = aws_api_gateway_rest_api.test.id
  deployment_id = aws_api_gateway_deployment.test.id
}

この設定ではステージのクライアント証明書を指定していません。バックエンドがこの認証方式を必要とするか確認する必要があります。

変更後

hcl
resource "aws_api_gateway_stage" "example" {
  stage_name            = "prod"
  rest_api_id           = aws_api_gateway_rest_api.test.id
  deployment_id         = aws_api_gateway_deployment.test.id
  client_certificate_id = var.api_gateway_client_certificate_id
}

api_gateway_client_certificate_id には、実際に生成した証明書の ID を渡してください。この設定だけでは、バックエンドが証明書を信頼・検証するようには構成されません。

参考資料