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プロトコルに制限するにはどうすればよいですか?
追加のクラウドフロントディストリビューションを備えたGateway APIが機能するためには、
Cloudfront設定
私はこれに広範囲に取り組んでいるだけであり、多くの試行錯誤を通して、これに対する現在の最適なソリューションであると私が信じるものを文書化することができます。 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であるとします。
API Gatewayで、カスタムドメイン名を編集し、地域設定を追加し、証明書を選択して、[保存]をクリックします。注:地域のAPIの場合、APIと同じ地域のACM証明書を使用する必要があります。詳細はこちら: https://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-migrate.html
新しく作成したリージョナルエンドポイントのターゲットドメイン名をコピーします。 (例:d-abcdefg123.execute-api.us-east-1.amazonaws.com)
Route 53またはDNSプロバイダーで、APIのマッピングをEdge Optimized CloudFrontターゲットドメイン名から新しく作成されたリージョナルエンドポイントターゲットドメイン名(つまり、d-abcdefg123.execute-api.us-east-1.amazonaws.com)に変更します。 )。
DNSの変更が反映されたら、カスタムドメイン名を編集し、xアイコンをクリックしてEdge Optimized Endpointを削除します。これにより、AWSがブロックすることなく、APIの同じCNAMEで新しいCloudFrontディストリビューションを作成できるようになります。
API Gatewayで、ドメイン名= Regional-api.example.com、エンドポイント構成= Regionalで新しいカスタムドメイン名を作成し、ACM証明書を選択します。 [保存]をクリックし、[編集]をクリックして、現在のAPIに従ってベースパスマッピングを追加し、[保存]をクリックします。新しく作成したリージョナルエンドポイントのターゲットドメイン名をコピーします。 (例:d-xyzabcd456.execute-api.us-east-1.amazonaws.com)
Route 53またはDNSプロバイダーで、regional-api.example.comを新しく作成したリージョナルエンドポイントターゲットドメイン名にマッピングする新しいCNAMEレコードを作成します。 (つまり、d-xyzabcd456.execute-api.us-east-1.amazonaws.com)
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
CloudFrontディストリビューションの作成が完了するまで(平均40分)、Route 53またはDNSプロバイダーで、test-api.example.comを新しく作成されたCloudFrontドメイン名にマッピングする新しいCNAMEレコードを作成します(例:d123abcdefg.cloudfront.net)。
ディストリビューションの作成が完了したら、test-api.example.comに対してアプリケーションを完全にテストします
テストがすべて良好である場合、新しいCloudFrontの代替ドメイン名(CNAME)を= api.example.comに更新します。 (注-これにより「ライブ」になることはありません。これには以下のDNS変更が必要です)
ディストリビューションの更新が完了したら(平均40分)、Route 53またはDNSプロバイダーで、api.example.comのCNAMEレコードマッピングを新しく作成されたCloudFrontドメイン名(つまり、d123abcdefg.cloudfront.net)に更新します。
すべてが正常に機能している場合は、Route 53/DNS CNA test-api.example.comレコードを削除し、さらにapi.example.com API Gatewayカスタムドメイン名を削除できます。
ボーナスポイントとして、Route 53を使用している場合は、上記のRoute 53の手順(私が行った)でCNAMEの代わりにAおよびAAAAレコードエイリアスを使用することをお勧めします。これにより、コストがわずかに削減され、基盤となるCloudFrontディストリビューションがいくらか隠され、IPv6サポートも有効になります。
これが役に立てば幸いです! :-)
これを見ている人のために、API Gatewayでカスタムドメインの最小TLSバージョン1.2を設定できるようになりました https://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-custom-domain -tls-version.html
CloudFront配布リストにAPIゲートウェイ配布を作成できます。 APIゲートウェイのオリジンにHTTPSがある場合、cloudfrontとAPIゲートウェイの間で使用するTLSプロトコルのタイプを指定できます。ビューア/クライアントとcloudfrontの間で、CloudFront構成の[一般]セクション> [セキュリティポリシー]でTLSプロトコルとスイートを指定できます。この構成は、SNIでカスタムSSLを使用する場合にのみ表示されます。次の中から選択できます。