Я пытаюсь создать пользователя IAM для консоли AWS с разрешением на перечисление и выполнение действий только на 1 экземпляре.
Итак, у меня всего 6 экземпляров, и я попытался скрыть 5 из них с помощью политик IAM, добавив следующую политику:
Сломать
1. Сначала удалил все разрешения
2. Добавлено разрешение только на один экземпляр
{
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"condition": {}
}
},
{
"Effect": "Allow",
"Action": "*",
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef",
"Condition": {
"condition": {}
}
}
]
}
Это работает только для 1-й части, то есть для запрета всем экземплярам.
Вторая часть вроде не работает.
Разве разрешения не работают? Любая помощь будет оценена.
Ваша текущая политика будет работать в AWS-CLI, например aws ec2 stop-instance
должно сработать.
Однако на самом деле использовать веб-консоль тебе нужно еще несколько разрешения только на чтение потому что консоль пытается перечислить и описать все экземпляры для построения списка.
Вам может понадобиться как минимум ec2:DescribeInstances
чтобы получить базовый полуразрушенный список.
Если вы заботитесь только о том, чтобы этот пользователь IAM не мог изменять другие экземпляры, вы можете предоставить ему доступ только для чтения с помощью ec2:Describe*
- это должно сделать консоль пригодной для использования, не позволяя ему изменять любые запрещенные экземпляры.
Я не знаю, как ограничить список экземпляров только тем, с которым он может работать, он, вероятно, увидит их все, но сможет управлять только одним.
Надеюсь, это поможет :)
Это невозможно сделать с помощью политик IAM. В ec2:Describe*
команды (включая ec2:DescribeInstances
) не поддерживают разрешения на уровне ресурсов. Таким образом, вы можете только разрешить или отрицать ec2:Describe*
За все (*
). Таким образом, ваш пользователь может видеть все экземпляры или ни одного.
Порядок заявлений политики не влияет на результат политики. Так что не пытайтесь писать или интерпретировать это «сверху вниз».
Политики работают так:
Итак, если у вас есть заявление «Запретить», ничто не может его отменить.
Чтобы иметь возможность «откладывать» разрешение, как вы пытаетесь сделать, вы должны выполнить одно из следующих действий:
Самое близкое, что вы получите, - это позволить вашему пользователю «видеть» все, но работать только с одним экземпляром EC2. Вам понадобятся 2 утверждения:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "*",
"Resource": "arn:aws:ec2:us-east-1:1234567890123:instance/i-12345678"
}
]
}
Вы должны отрицать все, но в вашем состоянии используйте ArnNotEquals "arn: aws: ec2: us-east-1: 123456789012: instance / i-0123456789abcdef"
Это в основном отклонит все остальные экземпляры, у которых нет того же ARN, что и у экземпляра, который вы хотите разрешить.
Видеть https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN Чтобы получить больше информации
Спасибо MLu и Sharuzzaman Ahmat Raslan!
Ваш вклад действительно помог мне в этом. Я добавляю краткое изложение того, что я сделал ниже, для других на случай:
Затем я использовал встроенную политику для добавления доступа. Я добавил приведенную ниже политику, которая, как упоминалось в MLu, позволит не прекращать перечисление экземпляров, но не позволит обновлять другие экземпляры.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "*)",
"Resource": "arn:aws:ec2:us-east-1:1234567890123:instance/i-xxxxxxxxxxxxxxxxx"
}
]
}
Надеюсь, это поможет кому-то сэкономить время.