【发布时间】:2018-05-15 00:03:38
【问题描述】:
我有一个节点应用程序正在以下列方式调用assumeRoleWithWebIdentity:
var params = {
DurationSeconds: 3600,
RoleArn: "arn:aws:iam::role/my_test_role",
RoleSessionName: "session_name",
WebIdentityToken: req.body.id_token
};
sts.assumeRoleWithWebIdentity(params, function(err, data) {
//create s3 client with data.Credentials.SecretAccessKey, AccessKeyId, sessionToken
//call s3.listObjectsV2({Bucket: 'my-bucket'}).
});
不,我在 IAM 调用 my_test_role 中有一个角色。附加到该角色的是一个名为 my_test_policy 的策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my_bucket",
"Condition": {"StringLike": {"s3:prefix": [
"",
"home/",
"home/BOB/*"
]}}
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my_bucket/home/BOB",
"arn:aws:s3:::my_bucket/home/BOB/*"
]
}
]
}
在 s3 中,我有一个名为 my_bucket 的存储桶,该存储桶中是 home 文件夹。家里有一堆用户文件夹:
my_bucket/home/ALICE
my_bucket/home/BOB
my_bucket/home/MARY
当我的节点应用程序列出对象时,它会列出 home 中的所有对象。我的策略的目的是将列表限制为已担任该角色的用户。因此,如果 BOB 已担任该角色,他应该只会看到 my_bucket/home/BOB 而不会看到其他任何内容。我最终将用 ${my_oidc_url:sub} 替换策略中硬编码的“BOB”。但在我开始这一步之前,我想我会硬编码“BOB”,看看它是否有效。它不是。假定的角色可以看到所有文件夹。有什么建议么?
【问题讨论】:
-
是的,我有。当这些不起作用时,我恢复为硬编码。
标签: node.js amazon-web-services amazon-s3 amazon-iam