2015-09-28 10 views
20

API Gateway(APIG)、CloudFront(CF)を使用している間はCDNエッジキャッシングをサポートしていません。カスタムディストリビューションとしてAPIGを使用するようにCFディストリビューションを設定したとき、私はアクセス権拒否エラーを受け取ります。APIゲートウェイの前にCloudFrontを追加する方法

この問題を解決するにはどうすればCFを設定しますか?

答えて

39

API Gateway(APIG)がCloudFormation(CF)の内部使用によるエッジキャッシングをサポートするまで、私は回避策を考え出しました。

実際にCFIGをAPIGの前に置くことができますが、HTTPSのみを強制的に「ビューアプロトコルポリシー」にし、APIGにSNIが必要であるためHOSTヘッダーを転送しないようにするのがこのトリックです。

CFを「デフォルトのキャッシュ動作設定」に設定するとヘッダーが転送されず、「ビューアプロトコルポリシー」が強制的に「HTTPSのみ」に設定され、動作します。これが他人を助けることを望みます。ここ

は、必要なすべての構成を有するCloudFormationリソース・オブジェクトである:

{ 
    "Type": "AWS::CloudFront::Distribution", 
    "Properties": { 
    "DistributionConfig": { 
     "Origins": [ 
     { 
      "Id": "pushchansearch", 
      "DomainName": "myapig.execute-api.us-east-1.amazonaws.com", 
      "CustomOriginConfig": { 
      "HTTPPort": "80", 
      "HTTPSPort": "443", 
      "OriginProtocolPolicy": "match-viewer" 
      }, 
      "OriginPath": { 
      "Fn::Join": [ 
       "", 
       [ 
       "/", 
       { 
        "Ref": "aaStage" 
       } 
       ] 
      ] 
      } 
     } 
     ], 
     "Enabled": true, 
     "Comment": "Push channel search", 
     "PriceClass": "PriceClass_100", 
     "DefaultCacheBehavior": { 
     "AllowedMethods": [ 
      "GET", 
      "HEAD", 
      "OPTIONS" 
     ], 
     "CachedMethods": [ 
      "HEAD", 
      "GET" 
     ], 
     "ForwardedValues": { 
      "QueryString": true, 
      "Headers": [], 
      "Cookies": { 
      "Forward": "none" 
      } 
     }, 
     "MinTTL": "0", 
     "TargetOriginId": "pushchansearch", 
     "ViewerProtocolPolicy": "https-only" 
     }, 
     "CustomErrorResponses": [ 
     ] 
    } 
    } 
} 
+0

これでパスパターンを使用できますか?私は静的ファイル用のS3バケットとAPIG APIという2つの起源を持つクラウドフロントディストリビューションのセットアップを持っています。 APIG用のPathPatternは起動しません。私はそれがファイル名やタイプではなく、特定のパスで一致しているからだと思う。 –

+8

API GatewayはCloudFrontをバックグラウンドで使用します。別のCloudFront配布をAPI Gatewayエンドポイントに向けた場合、CloudFrontはアンチループバックチェックを持つため、CloudFrontはリクエストをブロックします。私。 CloudFrontでCloudFrontを指すことはできません。私は、AWSのAWSエンジニアが「Invent 2015」で、CloudFrontディストリビューションにAPIゲートウェイを指すようにするために、アンチループバックチェックを緩和するように指示しました。まだ動作しているかどうかはまだ確認していません。 – Jamey

+0

私はちょうどテストしたし、現在は動作している 'curl https:// api.cloudprowess.com'が動作しています。 AWS Certificate Managerによって発行されたSSL証明書を使用するカスタムドメインを設定できるようにするために、これを行います。これは、APIゲートウェイ以外では利用できません。私の質問は、これがCloudFrontの帯域幅と要求に対して2回のコストをかけるか、またはCloudFront内のコストがゼロになるかどうかです。私はこれを新しい質問として尋ねます。 –

1

API Gatewayがで403エラーを返す場合:

をAuthorizationヘッダは、 '資格' パラメータを必要とします。許可 ヘッダーには「署名」パラメーターが必要です。承認ヘッダーには 'SignedHeaders'パラメータが必要です。承認ヘッダーには、 'X-Amz-Date'または 'Date'ヘッダーのいずれかの が存在する必要があります。

発信元のエンドポイントが間違っていることもあります。奇妙なことに、 "APIゲートウェイは、404が見つからないエラーではなく、403のアクセス許可が拒否されたエラーとして、存在しないパスのすべてのエラーを処理します。 (this support thread参照)。

私はこのエラーを受け取り、私が誤ってAuthorizationヘッダーを転送していると仮定しましたが、私は単にオリジンパスを誤って構成していました。

関連する問題