當我嘗試使用 AWS SDK 存取 Amazon S3 時,為什麼會遇到存取遭拒錯誤?

2 分的閱讀內容
0

當我使用 AWS Command Line Interface (AWS CLI) 時,可以存取 Amazon Simple Storage Service (Amazon S3) 資源。但是,我在使用 AWS SDK 時遇到存取遭拒錯誤。如何解決這個問題?

解決方法

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確認您使用的是最新版本的 AWS CLI

驗證您的 AWS CLI 和 AWS SDK 憑證

首先,確認您正在使用的 AWS CLI 和 AWS SDK 是否已設定相同憑證。若要這麼做,請遵循下列步驟:

若要取得 AWS CLI 上設定的憑證,請執行以下命令:

aws iam list-access-keys

如果您正在使用與 AWS CLI 相關聯的 AWS Identity and Access Management (IAM) 角色,請執行此命令以取得該角色:

aws sts get-caller-identity

若要取得您正在使用的 AWS SDK 上設定的憑證,請使用您的 AWS Security Token Service (AWS STS) 用戶端執行 GetCallerIdentity 呼叫。例如,如果您正在使用適用於 Python 的 AWS SDK (Boto3),請執行 get_caller_identity

如果 AWS CLI 和 AWS SDK 使用不同憑證,請使用 AWS SDK 以及 AWS CLI 上儲存的憑證。

對 Amazon S3 的 AWS CLI 和 SDK 請求進行疑難排解

如果 CLI 和 AWS SDK 使用的憑證相同,請透過詢問以下問題以繼續進行疑難排解:

  • 對 S3 的 CLI 和 SDK 請求是否來自相同來源? 即檢查請求是否來自同一個 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
  • 如果請求來自同一來源,SDK 是否使用預期的憑證? 例如,如果您使用適用於 Python 的 AWS SDK (Boto3),則該 SDK 允許您使用多種方法設定憑證。這意味著 Boto3 會按特定順序在多個位置查找憑證。如果在早期指定了任何不正確的憑證,則會使用這些憑證。如需 Boto3 在尋找憑證時的順序的詳細資訊,請參閱 Boto3 SDK 網站上的憑證

檢查您的 VPC 端點是否允許對 S3 的請求

如果請求是從不同來源傳送,請檢查正在使用 SDK 的來源是否透過 VPC 端點傳送請求。然後,確認 VPC 端點是否允許您嘗試傳送到 Amazon S3 的請求。

此範例中的 VPC 端點政策允許授予 DOC-EXAMPLE-BUCKET 下載和上傳權限。如果您正在使用此 VPC 端點,則將拒絕您存取任何其他儲存貯體。

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

如果您在憑證或來源中找不到任何問題,請檢閱 S3 可能會傳回存取遭拒錯誤的一些原因。如需詳細資訊,請參閱如何對來自 Amazon S3 的 403 存取遭拒錯誤進行疑難排解?


相關資訊

Amazon S3 中的 Identity and access management

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