I am new to AWS Service, I am doing some R&D on IAM. I created one IAM user and IAM role(with Full S3 Read permission) and attach that IAM User with Role. I am using Spring boot application trying to connect that bucket with IAM user using STS assume Role. But I am getting below error:
om.amazonaws.services.s3.model.AmazonS3Exception: The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 15G2FVKSWVYQNXXXX;
I know we can directly attach policy to user and fetch the bucket, but I want to try with assume role in same account. below is my code snippet:
public static void main(String[] args) {
try{
AWSSecurityTokenService stsclient= AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(getAWSCredentials("AKIAWEBTXXXXXXEDTIGNM", "KJR1e6eqk7schchdjhdyIf8R2FJQ6i")))
.withRegion(Regions.fromName("us-west-2"))
.build();
AssumeRoleRequest roleRequest= new AssumeRoleRequest().withDurationSeconds(3600).withRoleArn("arn:aws:iam::421XXXXX2511:role/s3_readonly_access_role").withRoleSessionName("test-session");
AssumeRoleResult roleResult=stsclient.assumeRole(roleRequest);
Credentials creds= roleResult.getCredentials();
AWSStaticCredentialsProvider credProvider= new AWSStaticCredentialsProvider(new BasicSessionCredentials(creds.getAccessKeyId(),creds.getSecretAccessKey(),creds.getSessionToken()));
AmazonS3 s3=AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(getAWSCredentials(credProvider.getCredentials().getAWSAccessKeyId(),credProvider.getCredentials().getAWSSecretKey())))
.withRegion(Regions.fromName("us-west-2"))
.build();
List<Bucket> buckets= s3.listBuckets();
for(Bucket bucket:buckets){
System.out.println(bucket.getName());
}
}catch(AmazonS3Exception ex){
ex.printStackTrace();
}
}
private static AWSCredentials getAWSCredentials(String accessKey, String secretKey) {
return new BasicAWSCredentials(
accessKey,
secretKey);
}