我需要获得具有特定权限的临时凭据,我的应用可以使用该权限来使用S3 over API。 问题是政策变量$ {aws:userid}在我的情况下不起作用。
重现的步骤:
创建允许所有s3操作进入用户特定文件夹的策略。
policy = AWS::STS::Policy.new(version: '2012-10-17')
policy.allow({
actions: ["s3:*"],
resources: ["arn:aws:s3:::my-bucket/folder/${aws:userid}/*"]
})
获取以前政策的临时凭证。
sts = AWS::STS.new(:access_key_id => 'ADMIN_ACCESS_KEY',
:secret_access_key => 'ADMIN_SECRET_KEY')
session = sts.new_federated_session("custom_user", policy: policy)
现在session
返回所有必需的凭据参数和user_id
811395474237:custom_user
。
我希望这个user_id将在$ {aws:userid}中,但事实并非如此。
s3u = AWS::S3.new(session.credentials)
bucket = s3u.buckets['my-bucket']
file = bucket.objects.create("folder/#{session.user_id}/user.txt", 'test file', :acl => :public_read)
这会让我Access Deny
错误。
使用来自sts.new_federated_session("custom_user", policy: policy)
的凭据时,应该是$ {aws:userid}?