我正在使用适用于Android的AWS开发工具包和Cognito来验证用户(通过使用亚马逊登录)到我的AWS资源。我尝试做的是设置一个S3存储桶,如下所示:
./my-bucket
├── first_user@email.com
└── second_user@email.com
因此,my-bucket
存储桶将根据用户的电子邮件地址包含文件夹。
我首先尝试制定政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::my-bucket"]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::my-bucket/${www.amazon.com:user_id}",
"arn:aws:s3:::my-bucket/${www.amazon.com:user_id}/*"
]
}
]
}
作为测试,我正在尝试为用户下载文件夹,如下所示:
final Map logins = new HashMap();
logins.put("www.amazon.com", token);
credentialsProvider.withLogins(logins);
final TransferManager transferManager = new TransferManager(credentialsProvider);
MultipleFileDownload download = transferManager.downloadDirectory("my-bucket", "first_user@email.com", new File("/sdcard/Download"));
然而,当我运行这个时,我得到一个“禁止”的例外。如果我修改政策以明确引用first_user@email.com
而不是${www.amazon.com:user_id}
,则可以正常使用。
我见过引用like this,但我不确定哪些实际适用。如果我以某种方式能够看到我提出请求时会遇到什么值,那就太棒了。
提前致谢。
答案 0 :(得分:2)
回答你的问题: