我正在使用AWS SDK for Android和Cognito来认证用户(通过Login With Amazon)访问我的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}
,它就可以正常工作。
问题
- 使用LWA用户的电子邮件地址配置是否可行?
- 是否有一种方法可以记录请求时发生了哪些参数?
我看到过像这样的参考,但我不确定哪些适用。如果我能够看到请求时传递的值,那将是非常好的。
提前感谢您的帮助。
${cognito-identity.amazonaws.com:sub}
,只需要使用getIdentityId
的返回值就可以了。 - Levi${cognito-identity.amazonaws.com:sub}
和${cognito-identity.amazonaws.com:aud}
是您可以使用的变量。 - Bob Kinneyaud
和sub
有什么区别? - ChrisHaud
是令牌的受众,在 Cognito 的情况下,这是身份池 ID。sub
是令牌的主题,即 Cognito 身份 ID。 - Bob Kinney