Как ограничить пользователя определенным томом экземпляра в AWS с помощью политики IAM
Я работаю над веб-сервисами Amazon. Разработка пользовательских политик IAM.
У меня есть пользователь, который имеет ограниченный доступ к экземплярам, как он может начать, остановить экземпляры. Точно так же я хочу ограничить присоединение пользователя, удалить определенные тома. Я создал эту политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TheseActionsDontSupportResourceLevelPermissions",
"Effect": "Allow",
"Action": ["ec2:DescribeInstances","ec2:DescribeInstanceStatus","ec2:DescribeVolumeAttribute","ec2:DescribeVolumeStatus","ec2:DescribeVolumes"], ,
"Resource": "*"
},
{
"Sid": "TheseActionsSupportResourceLevelPermissions",
"Effect": "Allow",
"Action": [
"ec2:RunInstances",
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:us-west-2:AccountID:instance/instanceID",
"Resource": "arn:aws:ec2:us-west-2:AccountID:instance/instanceID",
"Resource": "arn:aws:ec2:us-west-2:AccountID:instance/instanceID",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/volID",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/volID",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/volID"
}
]
}
когда я применяю эту политику, она не показывает мне никаких томов.
Я получаю ошибку:
error fetching the volume details.
Любое руководство ценится Спасибо
1 ответ
Обновить
Лучший способ тестирования / отладки политик IAM - это фантастический симулятор политик IAM (см. Использование симулятора политик IAM для получения реальной ссылки и инструкций). С его помощью можно легко проверить правильность приведенного ниже решения.
Я рекомендую добавить в свою учетную запись специального тестового пользователя без прикрепленных политик (то есть неявного запрета всех), а затем использовать режим: новая политика для сборки и моделирования соответствующей политики, например, для рассматриваемого варианта использования:
- используйте два тома и разрешите один с помощью политики, затем смоделируйте политику с обоими ресурсами, один приведет к отказу, а другой разрешен для
AttachVolume
а такжеDetachVolume
После того, как вы будете удовлетворены, вы можете применить собранную политику к сущностям в вашей учетной записи и перепроверить через Режим: Существующие политики.
Начальный ответ
Интересно, как вы смогли применить эту политику IAM, поскольку это синтаксически неверный JSON (Action
поле в первом Statement
не хватает какой-либо ценности)?
Помимо синтаксической ошибки, это также источник вашей проблемы:
Как указано TheseActionsDontSupportResourceLevelPermissions, некоторые действия API-интерфейса EC2 пока не поддерживают сравнительно новые разрешения на уровне ресурсов для ресурсов EC2 и RDS, см. Это примечание в разделе Имена ресурсов Amazon для Amazon EC2:
Важно В настоящее время не все действия API поддерживают отдельные ARN; позже мы добавим поддержку дополнительных действий API и ARN для дополнительных ресурсов Amazon EC2. Информацию о том, какие ARN можно использовать с какими действиями API Amazon EC2, а также о поддерживаемых ключах условий для каждого ARN см. В разделе " Поддерживаемые ресурсы и условия для действий API Amazon EC2".
Вы найдете, что все ec2:Describe*
на момент написания этой статьи действия по-прежнему отсутствуют в разделе " Поддерживаемые ресурсы и условия для действий Amazon EC2 API". Это также включает в себя ec2:DescribeVolume*
действия, поэтому вы получаете ошибку.
Исправление первого утверждения, как описано ниже, должно исправить проблему:
{
"Statement": [
{
"Sid": "TheseActionsDontSupportResourceLevelPermissions",
"Action": [
"ec2:DescribeVolumeAttribute",
"ec2:DescribeVolumeStatus",
"ec2:DescribeVolumes"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "TheseActionsSupportResourceLevelPermissions",
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:<region>:<account number>:volume/<volume id>"
}
]
}