Я пытаюсь создать пользователя IAM для консоли AWS с разрешением на перечисление и выполнение действий только на 1 экземпляре.
Итак, у меня всего 6 экземпляров, и я попытался скрыть 5 из них с помощью политик IAM, добавив следующую политику:
Breakdown
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-й части, т.е. запрета для всех экземпляров.
Вторая часть, похоже, не работает.
Разве разрешения не работают? Любая помощь будет принята с благодарностью.
Это невозможно сделать с помощью политик IAM. Команды ec2: Describe *
(включая ec2: DescribeInstances
) не поддерживают разрешения на уровне ресурсов. Таким образом, вы можете разрешить или запретить только ec2: Опишите *
для всего ( *
). Таким образом, ваш пользователь может видеть все экземпляры или ни одного.
Порядок заявлений политики не меняет результат политики. Так что не пытайтесь писать или интерпретировать это «сверху вниз».
Политики работают следующим образом:
Итак, если у вас есть оператор «Запретить», ничто не может его отменить.
Чтобы иметь возможность "голубиная дыра" и разрешение, как вы пытаетесь сделать, вы должны сделать одно из следующих:
Самое близкое, что вы получите, - это позволить вашему пользователю «видеть» все, но работают только на одном экземпляре 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"
}
]
}
Текущая политика будет работать в AWS-CLI, например aws ec2 stop-instance
должен работать.
Однако для фактического использования веб-консоли вам потребуется еще несколько разрешений только для чтения , потому что консоль пытается перечислите и опишите все экземпляры, чтобы составить список.
Вам может потребоваться как минимум ec2: DescribeInstances
, чтобы получить базовый полуразрушенный список.
Если вы заботитесь только о том, чтобы этот пользователь IAM не мог изменять другие экземпляры, вы можете предоставить ему доступ только для чтения с помощью ec2: Describe *
- это должно сделать консоль пригодной для использования, не позволяя ему изменять любые не -разрешенные экземпляры.
Я не знаю способа ограничить список экземпляров только тем, с которым он может работать, он, вероятно, увидит их все, но сможет управлять только этим единственным.
Надеюсь, что это поможет :)
Вы должны отрицать все, но в вашем состоянии используйте 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# Условия_ARN для получения дополнительной информации
Спасибо, MLu и Шаруззаман Ахмат Раслан!
Ваш вклад действительно помог мне в этом. Я добавляю краткое изложение того, что я сделал ниже для других, на случай:
Затем я использовал встроенную политику, чтобы добавить доступ. Я добавил приведенную ниже политику, которая, как упоминалось в MLu, позволяет не прекращать перечисление экземпляров, но не позволяет обновлять другие экземпляры
{
«Версия»: «2012-10-17»,
"Утверждение": [
{
«Эффект»: «Разрешить»,
«Действие»: «ec2: Describe *»,
«Ресурс»: «*»
},
{
«Эффект»: «Разрешить»,
"Действие": "*)",
«Ресурс»: «arn: aws: ec2: us-east-1: 1234567890123: instance / i-xxxxxxxxxxxxxxxxx»
}
]
}
Надеюсь, это поможет кому-нибудь сэкономить время.