使用資源型政策叫用 API Gateway API 時,如何對存取遭拒錯誤進行疑難排解?

2 分的閱讀內容
0

使用資源政策叫用 Amazon API Gateway API 操作時,出現存取遭拒錯誤。

解決方案

針對公用或私有 API Gateway API 操作,請依照下列疑難排解步驟進行。

公用 API 操作

1.    檢查 API 操作是否具有根據 IP 地址允許或封鎖請求的資源政策。如果您沒有設定存取記錄,請設定 API 閘道的存取日誌記錄。存取日誌包含 API 操作的來源 IP 地址。請確認 IP 地址不在拒絕清單內。IP 地址或 CIDR 範圍必須明確允許在資源政策中存取。

僅允許三個 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"
                    ]
                }
            }
        }
    ]
}

封鎖兩個 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 AuthorizerAmazon Cognito 身分驗證。請確認已針對您為 API 定義的身份驗證類型正確設定了資源政策。

4.    請確認您的重新部署 API 請求,以使所有變更生效。若要重新部署您的 API 請求,請重複步驟以將 REST API 部署至階段

5.    如果您使用的是 API Gateway 資源政策範例,請確認您已針對環境設定所有變數。

6.    如果您的資源政策只允許在 Amazon Virtual Private Cloud (Amazon VPC) IP 地址內存取,請執行下列其中一項操作:

在資源政策中允許路由器 IP 地址和 NAT Gateway IP 地址 (公用 IP 地址) 存取。

將公用 API 端點變更為私有 API 端點

私有 API 操作

1.    如果資源政策具有 Amazon VPC 端點,請檢查條件索引鍵的政策。如果資源政策使用條件索引鍵 aws:SourceVpce,則其值必須是 Amazon VPC 端點 ID,而不是 VPC ID。如果資源政策使用條件索引鍵 aws:SourceVpc,則其值必須是 Amazon VPC ID,而不是 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 AuthorizerAmazon Cognito 身分驗證。請確認已針對您為 API 定義的身份驗證類型正確設定了資源政策。


AWS 官方
AWS 官方已更新 1 年前