У меня есть приложение узла, которое вызывает acceptRoleWithWebIdentity следующим образом:
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
Когда мое приложение узла перечисляет объекты, оно перечисляет все объекты в доме. Цель моей политики - ограничить листинг для пользователя, который принял на себя роль. Так что, если BOB взял на себя роль, он должен видеть только my_bucket / home / BOB и ничего больше. В конечном итоге я заменим жестко закодированный 'BOB' в политике на $ {my_oidc_url: sub}. Но прежде чем перейти к этому шагу, я подумал, что просто наберу "BOB" жестко и посмотрим, сработает ли это. Это не. Предполагаемые роли видит все папки. Какие-либо предложения?