API Gatewayをクロスアカウントで参照する場合のトラブルシューティング


前提

  • API Gatewayのリソースポリシーは、APIをデプロイしないと反映されません。
  • API Gatewayをデプロイしてから、リソースポリシーが反映されるまで10秒くらいかかりました。
  • IAM RoleにAssume Roleしている場合(Federated Identityを利用している場合を含む)、ポリシーの更新が適用されるのはセッション更新後のようです(?)(これは自信ないですが...)

The client is not authorized to perform this operation.

API Gateway自体のリソースポリシーで、指定したオペレーション(=特定のエンドポイントへのリクエスト)が制限されています。
API Gatewayのリソースポリシー(sam拡張のCFnテンプレートの場合はx-amazon-apigateway-policy)を確認し、目的のResource(=エンドポイント)への execute-api:Invoke がAllow担っていることを確認しましょう。

Credential should be scoped to a valid region, not ...

{
    "message": "Credential should be scoped to a valid region, not 'ap-northeast-1'. "
}

認証タイプが AWS_IAM の場合、リクエスト時のREGIONは指定必須のようです。また、API GatewayのあるREGIONを指定する必要があります。

The security token included in the request is invalid.

{
    "message": "The security token included in the request is invalid."
}

考えられる原因

  • 認証タイプが AWS_IAM の場合、AccessKeyかSessionTokenが間違っています。
  • そもそもリソースが存在しないケースでも表示されます。

Missing Authentication Token

{
    "message": "Missing Authentication Token"
}

考えられる原因

  • そもそもリソースが存在しないケースでも表示される気がします。

is not authorized to perform

{
    "Message": "User: arn:aws:sts::********5355:assumed-role/****VY71/CognitoIdentityCredentials is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-west-2:********1790:****bkva/v1/GET/test"
}

考えられる原因

  • IAM側のポリシーの誤り
  • API Gateway側のリソースポリシーの誤り
  • 存在しないAPI Gatewayのリソースにアクセスしている

404 ACCESS DENIED

考えられる原因

  • リソースポリシーの設定漏れ・誤り
  • IAM Role/ User側のポリシーの設定漏れ・誤り

OPTIONSに対するリクエストで403 Forbiddenが返ってくる

考えられる原因

  • そもそもoptionsメソッドが設定されていない
  • optionsメソッドの設定に誤りがある。

レスポンスが返ってこない

考えられる原因

  • カスタムドメインのBasePathMappingの設定が完了していない
  • https:// ではなく http:// でアクセスしている
  • Route53の設定が完了していない

参考: ドメイン名を使用してトラフィックを Amazon API Gateway API にルーティングする

参考

Amazon API Gateway での REST API の作成、デプロイ、および呼び出し » API Gateway での REST API へのアクセスの制御と管理 » API Gateway Lambda オーソライザーの使用