无需访问权限和Java密钥即可上传AWS S3

Sud*_*Das 4 java amazon-s3 amazon-web-services aws-sdk

我想将文件上传到S3,而不使用AWS服务器的访问权限和密钥。AWS密钥应作为默认密钥。但是在服务器中运行以下命令,我可以访问它而无需提供任何访问权限和密钥。

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

从Java代码无法访问,因为它无法加载凭据。下面是我的代码。

AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
Run Code Online (Sandbox Code Playgroud)

not*_*est 5

s3client当您尝试从EC2实例连接到S3存储桶时,可以使用以下Java代码获取实例。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
              .withCredentials(new InstanceProfileCredentialsProvider(false))
              .build();
Run Code Online (Sandbox Code Playgroud)

这是推荐的方法,因为应用程序不需要维护属性文件中的访问密钥。

  • 应该创建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"
    }
Run Code Online (Sandbox Code Playgroud)