我的政策类似于
{
"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 ) );
我可以使用访问密钥和&密钥...
如何使用策略连接到s3存储桶,而无需使用Java进行基于密钥的访问。
我的意思是如何使用s3Client
文件
awsCreds
对象或policy.json
对象
答案 0 :(得分:1)
如果您在EC2实例上运行了应用程序,则可以将该策略附加到IAM角色并将该角色分配给该实例。这样,您无需为应用程序指定凭据。
在从控制台或AWS CLI启动期间,可以为EC2实例分配IAM角色
以下是AWS文档的完整详细信息:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
我们设计了IAM角色,以便您的应用程序可以安全地创建API 来自您的实例的请求,无需您管理 应用程序使用的安全凭证。
答案 1 :(得分:0)
如果EC2具有可以写入S3的角色,则
AwsCredentialsProvider awsCredentialsProvider=
InstanceProfileCredentialsProvider.builder().asyncCredentialUpdateEnabled(Boolean.TRUE).build();
S3AsyncClient client=S3AsyncClient.builder()
.credentialsProvider(awsCredentialsProvider).build();
InstanceProfileCredentialsProvider从实例元数据信息加载凭据。请参考文档 https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/InstanceProfileCredentialsProvider.html