web-dev-qa-db-ja.com

AWS API GatewayはTLS v1の使用を防止する必要があります

AWS Cloudfront Documentation を参照すると、AWS API GatewayはTLS v1.0、v1.1、v1.2をサポートしています。

しかし、ゲートウェイAPIの暗号化プロトコルをTLS v1.1およびv1.2に制限したいと思います。これはどこに設定すればよいですか? APIのcloudfrontディストリビューションが表示されません。ゲートウェイリソースページには、セキュリティプロトコルを指定するオプションがありません。

私のAPIは、カスタムドメインを使用して過去2年間本稼働しています。 API GatewayでのみAPIをTLS V1.1およびV1.2プロトコルに制限するにはどうすればよいですか?

9
suman j

追加のクラウドフロントディストリビューションを備えたGateway APIが機能するためには、

  1. AWSコンソールから、API GatewayでCustom Domain Nameに移動し、マッピングされたエントリを削除します。
  2. で新しいcloudfrontディストリビューションを作成する

Cloudfront設定

  • Gate APIエンドポイントとしてのオリジンドメイン名 https://abcdfefg.execute-api.us-east-1.amazonaws.com
  • HTTPSのみのビューアプロトコルポリシー
  • TLSv1.2、TLSv1.1としてのオリジンSSLプロトコル(TLSv1のチェックを外す)
  • Alternate Domain Nameの下にCNAMEエントリを追加して、カスタムドメイン名を参照します
  • 上記の変更が完了した後、httpsでカスタムドメイン名にアクセスすると、Cloudfrontディストリビューションで定義されているTLSセキュリティ設定が適用されます。
8
suman j

私はこれに広範囲に取り組んでいるだけであり、多くの試行錯誤を通して、これに対する現在の最適なソリューションであると私が信じるものを文書化することができます。 suman jからの回答は2017年10月の時点で最良のソリューションでしたが、制限があり、それ以来AWSも進化しています。

それで、制限は何ですか?

API GatewayでLambdaを使用していて、カスタムドメイン名を削除している場合、CloudFrontディストリビューションを手動で作成してLambda関数を関連付けるには、特定のLambdaバージョン番号が必要です。つまり、エイリアスはサポートされていません。これは、バージョン番号が継続的に変更される可能性があるCI/CDで問題になります。ただし、API Gatewayカスタムドメイン名ベースパスマッピングはエイリアスをサポートしているため、これらのエイリアスを引き続き使用することをお勧めします。

では、AWSはどのように進化しましたか?

2017年11月の時点で、API Gatewayはカスタムドメイン名でのリージョンエンドポイントの作成をサポートしています。これらのエンドポイントはCloudFrontディストリビューションを作成しないため、TLS v1.0の使用を妨げる独自のCloudFrontディストリビューションをそれらの前に配置する戦略を最適化します。

では、どのように設定するのですか?

これを(コンソールを介して)実行するために使用した手順は次のとおりです。特定のアプリケーションをサポートするには、一部の設定を変更する必要がある場合があります。このドキュメントでは、APIの名前がapi.example.comであるとします。

  1. API Gatewayで、カスタムドメイン名を編集し、地域設定を追加し、証明書を選択して、[保存]をクリックします。注:地域のAPIの場合、APIと同じ地域のACM証明書を使用する必要があります。詳細はこちら: https://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-migrate.html

  2. 新しく作成したリージョナルエンドポイントのターゲットドメイン名をコピーします。 (例:d-abcdefg123.execute-api.us-east-1.amazonaws.com)

  3. Route 53またはDNSプロバイダーで、APIのマッピングをEdge Optimized CloudFrontターゲットドメイン名から新しく作成されたリージョナルエンドポイントターゲットドメイン名(つまり、d-abcdefg123.execute-api.us-east-1.amazonaws.com)に変更します。 )。

  4. DNSの変更が反映されたら、カスタムドメイン名を編集し、xアイコンをクリックしてEdge Optimized Endpointを削除します。これにより、AWSがブロックすることなく、APIの同じCNAMEで新しいCloudFrontディストリビューションを作成できるようになります。

  5. API Gatewayで、ドメイン名= Regional-api.example.com、エンドポイント構成= Regionalで新しいカスタムドメイン名を作成し、ACM証明書を選択します。 [保存]をクリックし、[編集]をクリックして、現在のAPIに従ってベースパスマッピングを追加し、[保存]をクリックします。新しく作成したリージョナルエンドポイントのターゲットドメイン名をコピーします。 (例:d-xyzabcd456.execute-api.us-east-1.amazonaws.com)

  6. Route 53またはDNSプロバイダーで、regional-api.example.comを新しく作成したリージョナルエンドポイントターゲットドメイン名にマッピングする新しいCNAMEレコードを作成します。 (つまり、d-xyzabcd456.execute-api.us-east-1.amazonaws.com)

  7. CloudFrontで、次の設定で新しいディストリビューションを作成します。

原点設定:

  Origin Domain Name = regional-api.example.com
   

  After entering the above the following hidden fields should then be displayed:   

  Origin SSL Protocols = TLSv1.2 & TLSv1.1

  Origin Protocol Policy = HTTPS Only

デフォルトのキャッシュ動作設定:(これらの値は、APIを呼び出すアプリが適切に機能するために必要なものです)

  Viewer Protocol Policy = Redirect HTTP to HTTPS
    

  Allowed HTTP Methods = GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE

  Cached HTTP Methods = OPTIONS

  Cache Based on Selected Request Headers = Whitelist
    

  Whitelist Headers = Authorization   


  Object Caching = Customize  

  Minimum TTL = 0

  Maximum TTL = 0

  Default TTL = 0 

  Forward Cookies = All
      

  Query String Forwarding and Caching = Forward all, cache based on all
    

  Smooth Streaming = No

  Restrict Viewer Access (Use Signed URLs or Signed Cookies) = No
    

  Compress Objects Automatically = No 
   

  Lambda Function Associations = None

 

配信設定:

  Price Class = Use All Edge Locations
   

  AWS WAF Web ACL = None
     

  Alternate Domain Names (CNAMEs) = test-api.example.com
     

  SSL Certificate = Custom SSL Certificate (example.com)
   

  Custom SSL Client Support = Only Clients that Support Server Name Indication (SNI)
    

  Security Policy = TLSv1.1_2016 (recommended)
   

サポートされるHTTPバージョン= HTTP/2、HTTP/1.1、HTTP/1.0

  1. CloudFrontディストリビューションの作成が完了するまで(平均40分)、Route 53またはDNSプロバイダーで、test-api.example.comを新しく作成されたCloudFrontドメイン名にマッピングする新しいCNAMEレコードを作成します(例:d123abcdefg.cloudfront.net)。

  2. ディストリビューションの作成が完了したら、test-api.example.comに対してアプリケーションを完全にテストします

  3. テストがすべて良好である場合、新しいCloudFrontの代替ドメイン名(CNAME)を= api.example.comに更新します。 (注-これにより「ライブ」になることはありません。これには以下のDNS変更が必要です)

  4. ディストリビューションの更新が完了したら(平均40分)、Route 53またはDNSプロバイダーで、api.example.comのCNAMEレコードマッピングを新しく作成されたCloudFrontドメイン名(つまり、d123abcdefg.cloudfront.net)に更新します。

  5. すべてが正常に機能している場合は、Route 53/DNS CNA test-api.example.comレコードを削除し、さらにapi.example.com API Gatewayカスタムドメイン名を削除できます。

  6. ボーナスポイントとして、Route 53を使用している場合は、上記のRoute 53の手順(私が行った)でCNAMEの代わりにAおよびAAAAレコードエイリアスを使用することをお勧めします。これにより、コストがわずかに削減され、基盤となるCloudFrontディストリビューションがいくらか隠され、IPv6サポートも有効になります。

これが役に立てば幸いです! :-)

7
Alistair
1
user9371259

これを見ている人のために、API Gatewayでカスタムドメインの最小TLSバージョン1.2を設定できるようになりました https://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-custom-domain -tls-version.html

0
Daniel

CloudFront配布リストにAPIゲートウェイ配布を作成できます。 APIゲートウェイのオリジンにHTTPSがある場合、cloudfrontとAPIゲートウェイの間で使用するTLSプロトコルのタイプを指定できます。ビューア/クライアントとcloudfrontの間で、CloudFront構成の[一般]セクション> [セキュリティポリシー]でTLSプロトコルとスイートを指定できます。この構成は、SNIでカスタムSSLを使用する場合にのみ表示されます。次の中から選択できます。

  1. TLSv1
  2. TLSv1_2016
  3. TLSv1.1_2016
  4. TLSv1.2_2018
0
Faizal Sidek