Как ограничить пользователя определенным томом экземпляра в 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>"
    }
  ]
}
Другие вопросы по тегам