[英]AWS Cognito permissions to access S3 on Android
我正在开发一个Android应用程序并且一直在访问S3“斗争”Cognito时遇到问题。 我正在设置连接到我的认知池,使用我池中特定用户的用户名和密码:
AWSMobileClient auth = AWSMobileClient.getInstance();
auth.signIn("username", "password", new HashMap<String, String>());
if (auth.isSignedIn()) {
ActivityUtils.startActivity(this, MyActivity.class);
}
我在池中的用户被分配到具有附加S3角色的组:
Role ARN arn:aws:iam::<my account number>:role/Cognito_S3_Full_Access
其中包含这些权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
当我尝试使用我使用“AWSMobileClient”中的凭据创建的“AmazonS3Client”时,我不断收到错误。 我用这种方式创建它:
AWSMobileClient awsMobileClient =AWSMobileClient.getInstance();
AmazonS3Client s3Client = new AmazonS3Client(awsMobileClient);
而我得到的错误是 :
2019-05-20 17:56:21.645 27019-27019/com.mycomp.mypackage E/S3Uploader: Error upload file to S3 bucket : Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 375C07384A904483)
当我使用我创建的新“IAM”用户的HARD-CODED accessKey和secretKey创建“AmazonS3Client”并附加与上面相同的策略时,它按预期工作。 我这样使用它:
BasicAWSCredentials credentials = new BasicAWSCredentials("myAccessKey_hsjgfhjsdg", "mySecretKey_asdhasjkdha");
AmazonS3Client s3Client = new AmazonS3Client(credentials);
但我不想用硬编码密码填满我的应用程序,特别是我已经设法使用用户输入的用户名和密码进行连接
所以我的问题是我做错了什么?
如何让“AmazonS3Client”使用登录用户及其分配的组的会话和角色权限?
我已经正确设置了一切并获得相同的拒绝访问权限(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:8D650E2CCCD58E34)
我错过的是S3模板中的条件:
"Condition": {
"StringLike": {
"s3:prefix": [
"public/",
"public/*",
"protected/",
"protected/*",
"private/${cognito-identity.amazonaws.com:sub}/",
"private/${cognito-identity.amazonaws.com:sub}/*"
]
}
}
基本上,您的密钥必须从这些前缀开始,具体取决于策略。 我对Amplify文档中的public / s3Key.txt示例键没有太多考虑。
private val transferUtility = TransferUtility.builder()
.context(context)
.s3Client(AmazonS3Client(AWSMobileClient.getInstance(), Region.getRegion(Regions.EU_WEST_1)))
.awsConfiguration(AWSMobileClient.getInstance().configuration) // use the generated s3 template
.build()
transferUtility.upload("public/$key/${file.name}", file)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.