Я пытаюсь понять вашу проблему. Поправь меня, если я сделал неверное предположение.
- У каждой группы / пользователя уже есть своя роль.
Когда вы аутентифицируете своих пользователей, они играют свою роль. myuser1234
, при аутентификации получит роль arn:aws:sts::123456789012:assumed-role/role-for-grp-l2/myuser1234
, верно? Можно ли создать одну роль для каждой группы и удалить свойство conditions
(см. Пункт 2, объясняющий почему)?
// role-for-grp-l2
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:InvokeAsync",
"lambda:ListVersionsByFunction",
"lambda:GetFunction",
"lambda:ListAliases"
],
"Resource": "arn:aws:lambda:*:123456789012:function:my-lambda-function"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"lambda:ListFunctions",
"lambda:ListEventSourceMappings",
"lambda:ListLayers",
"lambda:ListLayerVersions"
],
"Resource": "*"
}
]
}
- Проблема с
aws:userid
Читая документы о ключе aws:userid
, мы можем обнаружить, что этот ключ имеет значение, заданное идентификатор роли: имя-роли-вызывающего абонента ,
где идентификатор роли - это уникальный идентификатор роли , а имя-роли-вызывающего абонента определяется параметром RoleSessionName , переданным в запрос AssumeRole.
Итак, aws:userid
имеет значение, подобное AIDAJQABLZS4A3QDU576Q:SomeNameYouGive
. По этой причине ваше условие никогда не будет соответствовать arn:aws:sts::123456789012:assumed-role/role-for-grp-l2/myuser1234
, и пользователь не сможет выполнить эти действия.
- Использование условий другим способом
Предполагая, что RoleSessionName
является именем пользователя, вы можете использовать условия следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:InvokeAsync",
"lambda:ListVersionsByFunction",
"lambda:GetFunction",
"lambda:ListAliases"
],
"Resource": "arn:aws:lambda:*:123456789012:function:my-lambda-function",
"Condition": {
"StringLike": {
"aws:userid": "*:myuser1234"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"lambda:ListFunctions",
"lambda:ListEventSourceMappings",
"lambda:ListLayers",
"lambda:ListLayerVersions"
],
"Resource": "*",
"Condition": {
"StringLike": {
"aws:userid": "*:myuser1234"
}
}
}
]
}
при желании вы можете удалить *
подстановочный знак, получив role id
, используя AWS CLI с помощью команды:
aws iam get-role --role-name ROLE_NAME
и изменение условия следующим образом:
"Condition": {
"StringEquals": {
"aws:userid": "ROLE_ID:myuser1234"
}
}