AWS文档告诉您如何使用Cognito API GetID和GetOpenIdToken以及STS API AssumeRoleWithWebIdentity获取STS令牌。在此过程中,AWS确实为您提供了IdentityId。
对每个用户进行S3访问的范围的常用方法是在表示用户的策略中分配前缀。
现在,AssumeRoleWithWebIdentity API将允许您附加用户范围的策略 - 但在这种情况下,我们希望从移动客户端调用此API - 由于安全问题而无法使用。
有没有办法可以构建某种使用IdentityId构建前缀的模板,还是我必须构建一个服务器并将其置于中间以使其安全?
答案 0 :(得分:0)
虽然AssumeRoleWithWebIdentity
确实采用了政策,但这是一个范围缩小政策,位于您假设的角色的现有政策之上,并且可选。此策略无法扩展该角色的权限,仅限制。如果您未提供其他范围缩减策略,则将使用该角色的基本策略。
您可以使用以下访问政策来确保您的用户只能根据其Cognito ID上传(并列出)特定前缀:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:PutObject","s3:GetObject","s3:DeleteObject"],
"Resource":"arn:aws:s3:::BUCKET_NAME/${cognito-identity.amazonaws.com:sub}/*"
},
{
"Effect":"Allow",
"Action":"s3:ListBucket",
"Resource":"arn:aws:s3:::BUCKET_NAME",
"Condition":{"StringLike":{"s3:prefix":"${cognito-identity.amazonaws.com:sub}/"}}
}
]
}