Ниже приводится краткое изложение вопроса. Прочитайте раздел полного описания для получения базовой информации.
Сокращенное описание:
Предположим, у вас уже есть пользователь IAM, и он уже может получить доступ к другим AWS службам, например, S3, CloudFront, ECS, EC2 ...
Допустим, нам нужно предоставить пользователю доступ только для чтения через кластер RDS и настроить аутентификацию IAM DB.
Мы выполняем все шаги, указанные в соответствии с официальным руководством, в НАШЕЙ локальной системе, и она отлично работает, и мы можем сгенерировать правильный токен авторизации для db_user
.
Однако, вот где это становится интересным ... когда пользователь пытается сгенерировать токен для учетной записи db_user
со своего локального компьютера .. пользователю будет отказано в доступе.
Полное описание:
Настройка:
Мой экземпляр кластера RDS запускает движок Aurora MySQL. Версия движка: 5.6.10a
Я следовал руководству AWS центра знаний по Как разрешить пользователям подключаться к Amazon RDS с учетными данными IAM?
В руководстве не упоминается явно, но при создании токена аутентификации AWS CLI использует учетные данные IAM, хранящиеся локально, для подписания запроса.
Я хотел бы выделить это в приведенном ниже фрагменте, admin - это имя профиля, которое хранится в AWS CLI для моего администратора IAM, тогда как db_user - это пользователь IAM (с привилегиями rds-db:connect
).
TOKEN="$(aws --profile admin rds generate-db-auth-token -h.. .. .. -u db_user)
Используя приведенный выше фрагмент, я могу аутентифицироваться с помощью сгенерированного токена и подключиться к кластеру.
Если атрибут --profile
не упомянут, он считывает профиль по умолчанию, сохраненный в файл учетных данных.
Проблема:
Вместо использования --profile admin
Я собираюсь использовать уже существующий профиль IAM без прав администратора для создания токена аутентификации.
Например, предположим, IAM нас имя: разработчик , с привилегиями RDS только для чтения и учетными данными, хранящимися локально в профиле rds_read_only
TOKEN="$(aws --profile rds_read_only rds generate-db-auth-token -h.. .. .. -u db_user)
Если я использую Приведенный выше токен выдает следующую ошибку:
ERROR 1045 (28000): Access denied for user 'db_user'@'ip' (using password: YES)
После нескольких часов устранения неполадок я смог сделать вывод, что мой профиль rds_read_only не может создать действительную аутентификацию токены, вероятно, из-за того, что пользователю IAM разработчику не хватает некоторых обязательных политик.
Я попытался подключить все политики, доступные в RDS
и RDS Data API
(индивидуально или в комбинациях) к пользователю IAM разработчик , без удачи. Если я присоединяю политику AdministrativeAccess
к пользователю IAM разработчику , только тогда он сможет успешно сгенерировать токен.
Вопрос:
Какие обязательные политики требуются для пользователей IAM без прав администратора, чтобы успешно создать токен аутентификации?