簡體   English   中英

沒有訪問權限的AWS S3上載和Java中的密鑰

[英]AWS S3 upload without access and secret key in Java

我想在不使用AWS服務器的訪問權限和密鑰的情況下將文件上傳到S3。 AWS鍵應作為默認值。 但是,在服務器中運行以下命令,我可以訪問它而無需提供任何訪問和密鑰。

aws s3 cp somefile.txt s3:// somebucket /

從Java代碼,它無法訪問,因為它無法加載憑據。 以下是我的代碼。

AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());

當您嘗試從EC2實例連接到S3存儲桶時,可以使用以下Java代碼獲取s3client實例。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
              .withCredentials(new InstanceProfileCredentialsProvider(false))
              .build();

這是推薦的方法,因為應用程序不需要在屬性文件中維護訪問鍵。

  • 應創建IAM角色,並為該角色提供S3訪問權限。 請參閱下面的示例政策。
  • 應將IAM角色分配給EC2實例

IAM角色的示例政策: -

{
        "Action": ["s3:PutObject",
        "s3:ListBucket",
        "s3:GetObject",
        "s3:DeleteObject"],
        "Resource": ["arn:aws:s3:::yourBucketName",
        "arn:aws:s3:::yourBucketName/*"],
        "Effect": "Allow",
        "Sid": "AllowBucketLinux"
    }

根據文檔AWS憑證提供程序鏈,按此順序查找憑據:

  1. 環境變量 - AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(推薦,因為它們被除.NET以外的所有AWS開發工具包和CLI識別),或AWS_ACCESS_KEY和AWS_SECRET_KEY(僅由Java SDK識別)
  2. Java系統屬性 - aws.accessKeyId和aws.secretKey
  3. 憑據配置文件位於所有AWS開發工具包和AWS CLI共享的默認位置(〜/ .aws / credentials)
  4. 如果設置了AWS_CONTAINER_CREDENTIALS_RELATIVE_URI“環境變量且安全管理員有權訪問變量,則通過Amazon EC2容器服務提供憑據,
  5. 通過Amazon EC2元數據服務提供的實例配置文件憑據

檢查您是否在上述任何一項中指定了有效憑據。
參考: http//docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

暫無
暫無

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

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