跳至內容

如何對連接到 OpenSearch Serverless 叢集或儀表板時收到的 403 或 401 錯誤進行疑難排解?

2 分的閱讀內容
0

當我對 Amazon OpenSearch Serverless 叢集執行 OpenSearch API 命令或嘗試存取儀表板時,我收到 403 或 401 錯誤。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

403 禁止錯誤

當 AWS Identity and Access Management (IAM) 身分沒有正確的權限,或要求簽章不正確時,通常會出現 403 禁止錯誤訊息。

當您在用戶端中開啟詳細記錄或在 IAM 控制台上選擇Network (網路) 索引標籤時,您可能會看到錯誤訊息「x-aoss-response-hint': 'X01:gw-helper-deny」。

對於 OpenSearch Dashboards 和 OpenSearch Serverless 資料平面 API 存取,請在 IAM 身分的權限政策中包含 aoss:DashboardsAccessAllaoss:APIAccessAll 動作。若要查看範例政策,請參閱使用 OpenSearch API 作業

對於 OpenSearch Serverless 資料平面 API 存取,簽署錯誤的請求也可能會導致 403 禁止錯誤。確認您的 IAM 權限正確後,請檢查您的用戶端與 OpenSearch API 的互動方式。

若要編寫簡單版程式碼,請參閱將資料擷取至 Amazon OpenSearch Serverless 集合

使用 curl 從 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體測試您的端點。

將記錄擷取至索引的 curl 命令範例:

curl -XPOST \
    —user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY" \
    —aws-sigv4 "aws:amz:us-east-1:aoss" \
    —header "x-amz-content-sha256: $REQUEST_PAYLOAD_SHA_HASH" \
    —header "x-amz-security-token: $AWS_SESSION_TOKEN" \
    "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com/movies-index/_doc" \
    -H "Content-Type: application/json" -d '{"title": "Shawshank Redemption"}'

**注意:**將範例存取金鑰 ID、金鑰和工作階段權杖替換為您的值。若要取得這些值,請執行 get-session-token AWS CLI 命令。

如果您傳送承載,請執行下列命令以產生承載的安全雜湊演算法 256 位元 (SHA-256) 作為標頭的一部分:

echo -n '{"title": "Shawshank Redemption"}' | shasum -a 256

您也可以在 GitHub 網站上使用 awscurlawscurl 會使用您的預設憑證,例如您的 EC2 執行個體設定檔,這樣您就不需要將承載作為標頭進行雜湊。

awscurl 請求範例:

awscurl --service aoss --region us-east-1 -XPOST \
    "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com/movies-index/_doc" \
    -H "Content-Type: application/json" -d '{"title": "Shawshank Redemption"}'
awscurl --service aoss --region us-east-1 -XGET \
    "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com/_cat/indices"

**注意:**將 us-east-1 替換為您的 AWS 區域,並將範例端點替換為您的端點。

使用詳細記錄來確認前面的標頭屬於傳送至服務的請求。 由於不正確的標頭值,會出現不正確的簽章。您也可以使用詳細記錄來確認集合端點、區域和服務是否正確。

其他 403 錯誤

根據您執行的動作,您可能會收到不同的 403 錯誤訊息。

對於索引特定擷取作業,您可能會看到類似「下列索引的授權失敗:[index/collectionname/indexname]」的錯誤訊息。

對於搜尋請求,您可能會看到如「所有碎片失敗」或「授權錯誤」之類的錯誤訊息。

對於非索引特定作業,您可能會看到類似「使用者沒有請求資源的權限」的錯誤訊息。

若要解決這些錯誤,請確定集合的資料存取政策包含集合和索引資源的正確權限。此外,請確定政策在 Principal (主體) 區段中包含正確的 IAM 身分。

如需資料存取政策語法的詳細資訊,請參閱政策語法

401 未授權錯誤

當網路政策拒絕存取 OpenSearch Serverless API 或儀表板時,通常會出現 401 錯誤訊息。

當您在用戶端開啟詳細記錄或檢視瀏覽器開發人員主控台的 Network (網路) 索引標籤時,您可能會看到錯誤訊息「x-aoss-response-hint': 'X01:network-policy-deny」。

若要從公用網際網路存取 OpenSearch Serverless API 和儀表板,請在網路政策中開啟公開存取。

JSON 格式的網路政策範例:

[
  {
    "Rules": [
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "dashboard"
      },
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "collection"
      }
    ],
    "AllowFromPublic": true
  }
]

**注意:**將 collectionname 替換為您集合的名稱。

若要對 API 和儀表板進行私人存取,請在用戶端 VPC 中為 OpenSearch Serverless 建立 VPC 端點。

JSON 格式的網路政策範例:

[
  {
    "Rules": [
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "dashboard"
      },
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "collection"
      }
    ],
    "AllowFromPublic": false,
    "SourceVPCEs": [
      "vpce-0c9xxxxxxxxxxa680"
    ]
  }
]

**注意:**將 collectionname 替換為您集合的名稱。

如需網路政策的其他範例,請參閱 Amazon OpenSearch Serverless 的網路存取

若要從另一個 VPC 存取任何 OpenSearch Serverless 網域,請在該 VPC 中建立一個 OpenSearch Serverless VPC 端點。如需詳細資訊,請參閱使用介面端點 (AWS PrivateLink) 存取 Amazon OpenSearch Serverless

**注意:**您可以選擇讓用戶端從 VPC 呼叫 OpenSearch Serverless API 端點。您可以從使用公共網際網路的瀏覽器存取儀表板。

若要從公司網路私密存取儀表板,請使用傳入 DNS 解析器端點。DNS 查詢會傳回正確的私有 IP 位址。如需詳細資訊,請參閱使用 VPC 端點存取 Amazon OpenSearch Serverless 集合

相關資訊

如何對存取 OpenSearch Serverless 儀表板以檢視集合的問題進行疑難排解?

AWS 官方已更新 1 年前