web-dev-qa-db-ja.com

メッセージの取得:AWS APIゲートウェイからの禁止された応答

[解決済み] AWS(およびStackOverflow)の新機能。 AWSでラムダサービスを作成しようとしていますが、認証や制限なしでAPIゲートウェイ経由で外部からアクセスします。

物事を簡単にするために、今はゲートウェイをモックに設定します。

APIのGetメソッドでは、認可はNoneに設定され、APIキーはnot requiredです。

これを試すと、{"message":"Forbidden"}(実際のラムダサービスに接続すると同じメッセージが表示されます)が表示されます。

アクセス可能にする方法に関するアドバイスはありますか?ありがとう

34
Fab

「APIキーが必要」オプションをtrueに設定した場合は、以下を確認してください。

  1. 「x-api-key」HTTPヘッダーパラメーターをAPI Gatewayに渡す必要があります。
  2. APIキーを作成する必要がありました。
  3. さらに、API GatewayコンソールでAPIキーの使用計画を確認する必要があります。
55

API Gatewayダッシュボードで[リソース]を選択し、[アクション]をクリックして[APIのデプロイ]を選択します。最初の展開の前に返される応答は{"message":"Forbidden"}のみです。

41
jneves

カスタムドメイン名を使用し、宛先ステージングの選択を忘れると、Forbiddenメッセージが表示されます。

Custom Domain Namesに移動して、ドメインの下のEditをクリックし、Base Path Mappingsの下のステージを選択します。

20
kontrollanten

同様の問題が発生しましたが、次の問題がありました。

  1. カスタムドメイン(エッジ最適化)
  2. 複数のステージ(開発、ステージング、製品)

また、物事を簡単にするための承認も制限も設定しませんでした。

各ステージ(dev、staging、prod)にBase Path Mappingsを追加することで問題を修正できました。

6
Joben R. Ilagan

ステージにAPIをデプロイし、ステージURLを使用してリソースに移動し、[アクション]をクリックして[APIのデプロイ]を選択する必要があります。

エラーが発生している場合

{「メッセージ」:「禁止」}。

次の手順を確認してください

1)APIキーコピーを有効にして、郵便配達員にキーを渡す場合

enter image description here

2)今でも同じエラーが表示されるのは、使用計画を作成する必要があることを意味します

enter image description here

3)制限を設定し、APIに計画を割り当てます

enter image description here

5
vaquar khan

「API」キーをtrueに設定する場合、APIキーをヘッダーとして渡す必要があります。

APIキーはヘッダーフィールド「x-api-key」として渡されます。このフィールドをヘッダーに追加した後でも、この問題が発生する場合があります。その場合、以下の点を検証してください

  • 使用計画はありますか?作成する必要がない場合。
  • APIを使用プランにリンクします。ステージを追加するために、APIをリンクします。
  • APIキーはありますか?そうでない場合は、APIキーを作成して有効にする必要があります。
  • APIにリンクされている使用プランをこのAPIキーに追加します。そのために使用プランを追加します。
4
bisw

メソッドのAuthorizationAPI KEY Requiredの両方がtrueに設定されている場合、リクエストの送信中に次のヘッダーがあることを確認してください。

  1. Content-Type(通常、GET呼び出しの場合はapplication/x-www-form-urlencoded)
  2. ホスト
  3. X-Amz-Date
  4. 認可
  5. x-api-key

APIテストにはPOSTMANを使用しますが、これは非常に信頼性が高いので、簡単です。

注:API KEY REQUIREDをFALSEに設定した場合は、x-apiキーヘッダーを追加しないでください。 AUTHORIZATIONをFALSEに設定している場合は、Authorizationヘッダーを追加しないでください。

3
illusionx

これは明らかではないかもしれませんが、AWS API Gatewayを使用するときに「禁止」エラーが表示される別の理由は、デプロイされたAPIメソッドに対応しない不正なURLを呼び出している可能性があります。実際に間違ったURLにアクセスしている場合(たとえば、https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/usersdevの前にusersステージを呼び出す)ではなく、https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users(ステージなし)を呼び出した場合に発生する可能性があります。 403を取得します。

ところで:https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/usersを呼び出してhttps://9999xx9x99.execute-api.us-east-1.amazonaws.com/userにデプロイすると(単数形に注意してください)、403も取得されますが、「Missing Authentication Token」メッセージが表示されます。

3
madhead

この問題の解決策を見つけたかもしれません。 MacOSでも同じ問題が発生しました。 DNSのフラッシュを試みましたが、その後はうまくいきました!

ターミナルでこれを試してください:

Mac OS X Yosemite以降

Sudo killall -HUP mDNSResponder

Mac OS X Yosemite v10.10〜v10.10.3

Sudo discoveryutil mdnsflushcache

Mac OS X Mavericks、Mountain Lion、Lion

Sudo killall -HUP mDNSResponder

Mac OS X Snow Leopard

Sudo dscacheutil -flushcache
2
haynzz

遅すぎるかもしれませんが、API Gatewayが「禁止」メッセージを出す理由の1つは、GET操作でリクエスト本文にデータを渡すときです。この問題を解決するには、リソースをPOSTにするか、リクエスト本文にデータを渡さないようにします。

2

API GatewayのプライベートAPIにアクセスしようとするnginx fargateサービスからこのエラーが発生しました。このような私のAPIのリソースポリシーの下にポリシーを追加する必要がありました

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:<AccountID>:<RestApiID>/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "<VPC Endpoint ID for execute-api>"
                }
            }
        }
    ]
}
1
gary69

ローカルファイアウォール/ウイルス対策またはNGIPS(Cisco Bluecoat)。後者は私の場合で、APIからCloudWatchでログを取得することさえしませんでした。私のトップレベルドメインでホストされたウェブサイトを許可していましたが、ブラウザのネットワーク開発ツールタブにボディのないapiサブドメインをブロックしていました。

1
Radu

API Gatewayで{message:forbidden}を受け取った場合、いくつかのことを行う必要があります。

CORS有効?

  1. API内でCORSが有効になっているかどうかを確認します(最初にOrigin '*'を許可し、安全にテストできることを確認します)
  2. APIをデプロイして、すべての設定が期待どおりであることを確認します

APIキーが有効ですか?

  1. API GatewayでAPIキーが有効になっているかどうかを確認します
  2. APIキーが構成されているかどうかを確認します。
  3. APIキーが正しい使用プランに割り当てられているかどうかを確認し、APIステージを追加します。APIステージがなければ、常に{message:forbidden}が表示されます

それでも問題が解決しない場合は、私またはクラウドの第一人者である@levarneがお手伝いできるようにお知らせください。

1
Max Lans

KongをAPIゲートウェイとして使用したときに、本番環境でこの問題に直面していました。 Postmanから開始された場合、リクエストはthroを通過しましたが、Codeを介して開始された場合、403で失敗しました。 Kongのボットプラグインが有効になり、ユーザーエージェントヘッダー値に基づいてブラウザーまたはモバイルアプリから開始された要求のみが許可されました。Httpクライアントを介して開始された要求は失敗しました。ボットプラグインを無効にすると、エラーは発生しませんでした。ユーザーエージェントがApache-HttpClient/4.5.2(Java/1.8.0_91)の場合、リクエストが許可されるようになりました。

0
Cshah

EndpointConfigurationをPRIVATEに設定したAPIで{"message":"Forbidden"}を取得し、VpcのプライベートサブネットでVpcEndpointを作成しました(これはサービス間APIです)

{"message":"Forbidden"}を取得した理由は、VpcEndpointのURLの1つを使用する必要があるという印象を受けていたためです。使用するURLは、まだステージに関連付けられているものです(ApiGatewayコンソール内)。それは:

https://${RestApiId}.execute-api.${Region}.amazonaws.com/${StageName}

0
Adriaan Pelzer