java - 如何通过 Java 使用没有 key 的策略连接到 S3 存储桶

标签 java amazon-web-services amazon-s3

我有一个类似的政策

{
"Id":"Pid6",
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:PutObject",
        "Action": "s3:GetObject",
        "Action": "s3:ListBucket",
        "Resource": [
                     "arn:aws:s3:::test-bucket",
                     "arn:aws:s3:::test-bucket/*"
                    ]
    }
  ]
}

我连接到 S3 存储桶的 Java 代码是

BasicAWSCredentials awsCreds = new BasicAWSCredentials("accessKey", "secretKey");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
            .withRegion(Regions.region).build();
s3Client.putObject( new PutObjectRequest( S3_BUCKET, s3Path, file )
            .withCannedAcl( CannedAccessControlList.PublicRead ) );

我可以使用访问 key 和 secret key 连接到 s3... 如何使用策略连接到 s3 存储桶,而不需要使用 Java 进行基于 key 的访问。 我的意思是如何使用 policy.json 文件获取 s3Client 对象或 awsCreds 对象

最佳答案

如果您有一个在 EC2 实例上运行的应用程序,您可以将策略附加到 IAM 角色并将该角色分配给该实例。这样,您就不需要为应用程序指定凭据。

可以在启动期间从控制台或通过 AWS CLI 向 EC2 实例分配 IAM 角色

以下是 AWS 文档中的完整详细信息:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

We designed IAM roles so that your applications can securely make API requests from your instances, without requiring you to manage the security credentials that the applications use.

关于java - 如何通过 Java 使用没有 key 的策略连接到 S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45026939/

相关文章:

java - 打印大小为 m * n 的矩阵中所有元素的组合

java - 如何在Gradle中启用Java代理调试?

java - 如何使用 Java 检查给定的 S3 存储桶中是否存在指定的 key

java - 如何将 list<SomeType> 转换为保留所有重复键和值的映射

使用 javac 对同一 jar 成功编译后,java 在 jar 中找不到类

php - AWS ECS Docker-nginx : [emerg] host not found in upstream

go - 执行 aws-lambda 函数时出现错误 "fork/exec/var/task/main: no such file or directory"

amazon-web-services - 如何快速上传本地文件到S3?

amazon-web-services - S3 存储桶通知或 CloudWatch 事件规则在对象级别更改时调用 Lambda?

aws 上的 mongodb 自动故障转移/高可用性