リソースポリシーを使用して Amazon API Gateway API オペレーションを呼び出すと、アクセス拒否エラーが表示されます。
解決方法
パブリック API またはプライベート API Gateway API の操作については、次のトラブルシューティング手順に従ってください。
パブリック API オペレーション
1. API オペレーションに、IP アドレスに基づいてリクエストを許可またはブロックするリソースポリシーがあるかどうかを確認します。アクセスログを設定していない場合は、API Gateway のアクセスロギングを設定します。アクセスログには、API オペレーションのソース IP アドレスが含まれます。IP アドレスが拒否リストに含まれていないことを確認します。IP アドレスまたは CIDR 範囲は、リソースポリシーで明示的にアクセスを許可する必要があります。
3 つの IP アドレスのみを許可するリソースポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"52.36.146.106",
"34.216.36.206/32",
"205.251.233.179/32"
]
}
}
}
]
}
2 つの IP アドレスをブロックするリソースポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
],
"Condition" : {
"IpAddress": {
"aws:SourceIp": ["52.36.146.106", "34.216.36.206/32" ]
}
}
}
]
}
2. API リクエストの HTTP メソッド (GET、POST) と API Gateway リソース (/、/foo、/foo/bar) は、明示的にアクセスを許可する必要があります。次のようなリソースポリシー属性を確認します。
"Resource": [
"arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
],
3. リソースポリシーが他のタイプの認証方法またはオーソライザーを使用しているかどうかを確認してください。リソースポリシーの API Gateway 評価は、認証タイプの影響を受けます。認証タイプの例には、AWS Lambda オーソライザーや Amazon Cognito 認証があります。リソースポリシーが API に定義されている認証タイプに合わせて正しく設定されていることを確認してください。
4. すべての変更を有効にするには、必ず API リクエストを再デプロイしてください。API リクエストを再デプロイするには、同じ手順を繰り返して REST API をステージにデプロイします。
5. API Gateway リソースポリシーの例を使用している場合は、環境に合せてすべての変数が設定されたことを確認してください。
6. リソースポリシーで Amazon Virtual Private Cloud (Amazon VPC) IP アドレス内へのアクセスのみが許可されている場合は、次のいずれかを実行してください。
リソースポリシーでルーター IP アドレスと NAT ゲートウェイ IP アドレス (パブリック IP アドレス) へのアクセスを許可します。
パブリック API エンドポイントをプライベート API エンドポイントに変更します。
プライベート API オペレーション
1. リソースポリシーに Amazon VPC エンドポイントがある場合は、ポリシーで条件キーを確認してください。リソースポリシーで条件キー aws: SourceVpce を使用する場合、その値は VPC ID ではなく Amazon VPC エンドポイント ID でなければなりません。リソースポリシーで条件キー aws: SourceVpc を使用する場合、その値は VPC エンドポイント ID ではなく Amazon VPC ID でなければなりません。
エンドポイントタイプを確認するには、Amazon VPC コンソールを開き、[エンドポイント] を選択し、エンドポイントを選択します。
2. すべての変更を有効にするには、必ず API リクエストを再デプロイしてください。API リクエストを再デプロイするには、同じ手順を繰り返して REST API をステージにデプロイします。
3. API Gateway リソースポリシーの例を使用している場合は、環境に合わせてすべての変数が設定されているかを確認してください。
4. API リクエストの HTTP メソッド (GET、POST) と API Gateway リソース (/、/foo、/foo/bar) は、明示的にアクセスを許可する必要があります。次のようなリソースポリシー属性を確認します。
"Resource": [
"arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
],
5. リソースポリシーが他のタイプの認証方法またはオーソライザーを使用しているかどうかを確認してください。リソースポリシーの API Gateway 評価は、認証タイプの影響を受けます。認証タイプの例には、AWS Lambda オーソライザーや Amazon Cognito 認証があります。リソースポリシーが API に定義されている認証タイプに合わせて正しく設定されていることを確認してください。