ОШИБКА 1045 (28000): доступ запрещен для пользователя 'db_user' @ 'ip' (используется пароль: YES) при подключении к экземпляру RDS DB с использованием аутентификации IAM DB - PullRequest
0 голосов
/ 08 апреля 2020

Ниже приводится краткое изложение вопроса. Прочитайте раздел полного описания для получения базовой информации.

Сокращенное описание:

Предположим, у вас уже есть пользователь 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 без прав администратора, чтобы успешно создать токен аутентификации?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Это отвечает на конкретный c вопрос @ Ronn ie относительно генерации токена.

Ronn ie Я вернулся. Я использовал следующую политику в своей учетной записи AWS: Песочница. Я AWS Федеративный пользователь с привилегиями AssumeRole, поэтому Admin

Вы должны быть очень осторожны, потому что, как вы сказали, статья не делает отличие от:

AWS ПОЛЬЗОВАТЕЛЬ IAM, использующий сгенерированный токен для доступа к БД и

AWS Пользователь / роль IAM с правами администратора Политики, которые генерируют VALID Token

Я приведу пример того, как идентифицировать правильно сгенерированные токены. По какой-то причине AWS генерирует значение, но не сообщает вам, является ли полезный токен или нет: - \

Токен без специального доступа администратора = НЕ РАБОТАЕТ

sandboxdb.asdasdffw.ap-southeast-2.rds.amazonaws.com:3306/?Action=connect&DBUser=human_user&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA5XZIHS3GYVMRPRZF%2F20200424%2Fap-southeast-2%2Frds-db%2Faws4_request&X-Amz-Date=20200424T035250Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=3efd467d548ea05a8bdf097c132b03661680908f723861e45323723c870ef646

Токен с доступом = Будет работать! Посмотрите внимательно и он содержит X-Amz-Security-Token =

sandboxdb.ras21th1z8.ap-southeast-2.rds.amazonaws.com:3306/?Action=connect&DBUser=human_user&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA5XZIHS3GSAQI6XHO%2F20200424%2Fap-southeast-2%2Frds-db%2Faws4_request&X-Amz-Date=20200424T040756Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEQaDmFwLXNvdXRoZWFzdC0yIkgwRgIhAOzVIondlMxYkJG5nWNeQlxS0M6B1pphgD1ewFwx2VfKAiEAkcp2jNHHmNMgwqUholnW545MwjzoEjS1uh4BHI4R4GAqvgMIbRABGgw5NDQ0NDAzMTc2NDUiDEvFkyEy833kd%2By4nyqbAybqK5dcP0nTlqZ19I2OVZxzwzz%2BUv9RVdVLMPHE5b%2FqXQGVG1CRtw90r9Lt4QkzTBeIVzdtIkXbpwFtqFh24Djb%2BiZHfvElj%2Fhz29ExzStU0fPYMewEB1u%2F2Osi72Fw6KbZ6TDy5EjuWcrrS08PZQ9CHc%2Fc8iDAIKs28vJ70KKcmow0SInVZGHGpD2JAgIL7jvnadVlcAW7lN2OAnxS72Kb4neqNuHcWzfPLfbXaOP1OaOs7vCR7zDlTTxX2aHoVflC69K9K67BqzdnDnnju%2F4XWQWU3r%2ByXylExwOsiG3y4Qq6wv002l%2BpQmF5%2BMXdTrFR5ewpfrcHf8TZLI5eq8HLA2gG1%2B255L%2Bqt%2BD80T%2FCzEdKSJPjppdYSq9FdeCMRSsqp5PpXP%2BDbQZwmhxiE2RmrbOKwNsFPJqUUnemQHXYLB8lily56nnswT2PYmQOGHqnZWRrv%2FTlGOAGlThuiR%2BLhQLBC08nBEGbBqK%2FjU4JwFMY4JfhgUHr8BA9CuGwAu0qIAFzG71M3HzCNX6o56k1gYJB%2F3%2FJaKlp7TCIxIn1BTrqASqywcfKrWhIaNX3t%2BV%2FZoYYO%2FtGVBZLyr3sSmByA%2Fwq538LiPHA0wDE3utOg%2FwNP%2BQGTcXhk1F%2BI0HOHztAQ2afnKW8r1oRbXxYAzb2j2b8MNEwrsaBju2gHFRgZHkM8YI%2FP5cvYr%2F8FQXWcE9eqjdme0hOo3rPETzxZfRwNQTHEntBbVVD1ec0d7DblfSEDZhLk%2By1%2BFMAYf7NeBIfU6GNsAN2hTdSkPPuto2fQKzRybRAwxQz5P3cO5CClUNIxu4J3bM1MUUTux%2BtMjqRvjGxDhB4yLIJmIPOOYLDSOXl3aWO2y4v89wu5A%3D%3D&X-Amz-Signature=1c6fcc472bb2af09055117075ca21d4a5f715910443115116c9230905721e79d

AWS Политика IAM Для пользователя БД для подключения к AWS Экземпляр БД RDS

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "*"
        }
    ]
}

Чтобы избежать путаницы с локальными конфигами, я использовал следующий процесс тестирования:

  1. Генерация токена из экземпляра AWS EC2, работающего в том же VP C, что и DB. Генерация прошла успешно
  2. Генерация токена с локального компьютера с использованием контейнера Docker с AWS CLI Генерация токена прошла успешно.

Конечно, мой пользователь был создан в БД MySQL с помощью следующей команды

mysql -h $HOSTNAME -u$ADMIN_USER -p$ADMIN_PASS <<EOF
CREATE USER db_human_user IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
GRANT SELECT ON $SPECIFIC_GIVEN_DB.* TO 'db_human_user';
EOF
0 голосов
/ 23 апреля 2020

я видел ваш вопрос в AWS блоге.

  1. Вам необходимо создать политику IAM для определения доступа к вашим AWS экземплярам RDS. Проверьте это документы

    {"Версия": "2012-10-17", "Заявление": [{"Эффект": "Разрешить", "Действие": ["rds- db: connect "]," Resource ": [" arn: aws: rds-db: us-east-2: 1234567890: dbuser: /"]}]}

  2. Создать пользователя внутри экземпляра RDS DB с инструкциями по использованию плагина IAM. Проверьте это документы

  3. Создайте токен, проверьте это документы

  4. Я нашел этот хороший плагин , который создает JDB C jar для аутентификации IAM.
...