簡體   English   中英

com.amazonaws.services.s3.model.AmazonS3Exception:訪問被拒絕

[英]com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied

這是我的Java代碼:

        AmazonS3 conn = new AmazonS3Client();
        AmazonS3URI uri = new AmazonS3URI(s3uri);
        ObjectListing objects = conn.listObjects(uri.getBucket(), uri.getKey());

一個非常簡單的任務,我嘗試使用 AmazonS3 Java 客戶端訪問 S3,但是這一行conn.listObjects一直失敗並給了我以下異常:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXXX), S3 Extended Request ID: xxxxxxxxx
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1389)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:902)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3778)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:610)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:588)
  1. 一個非常明顯的錯誤代碼:403 表示我的 aws 憑據錯誤,但是,這與我的同事用來訪問同一個 s3 存儲桶的憑據完全相同,以排除我在某處輸入錯誤的可能性,我從字面上刪除我以前的一個,使用的是我同事發給我的同一個,並將它們放在 ~/.aws/ 下

  2. 我還研究了其他可能的原因,一個可能是這個 S3 存儲桶沒有向我的 IAM 角色授予權限,顯然這也不是我的情況。

請問有什么幫助嗎? 罪魁禍首可能是什么?

適用於 Java 的 AWS 開發工具包有一個DefaultAWSCredentialsProviderChain ,它按以下順序檢查憑證:

  • 環境變量- AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY(推薦,因為它們被除 .NET 之外的所有 AWS 開發工具包和 CLI 識別),或 AWS_ACCESS_KEY 和 AWS_SECRET_KEY(僅被 Java 開發工具包識別)
  • Java 系統屬性- aws.accessKeyId 和 aws.secretKey
  • 所有 AWS 開發工具包和 AWS CLI 共享的默認位置 ( ~/.aws/credentials ) 中的憑證配置文件
  • 如果設置了AWS_CONTAINER_CREDENTIALS_RELATIVE_URI環境變量並且安全管理員有權訪問該變量,則通過Amazon EC2 容器服務交付的憑證
  • 通過Amazon EC2 元數據服務交付的實例配置文件憑證

有可能在查閱所需的配置文件之前設置了您的憑據。

檢查正在使用哪些憑據的一種方法是使用aws iam get-user命令顯示當前用戶。 您也可以使用GetUser()調用在 Java 中嘗試。

如果它對任何人有幫助 - 我收到此錯誤是因為在嘗試上傳到存儲桶時未指定服務器端加密時存儲桶策略設置為拒絕s3:x-amz-server-side-encryption

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM