Python Boto3 получить учетные данные кластера не работает - PullRequest
0 голосов
/ 27 апреля 2018

Я использую boto3 для получения временного DbPassword для красного смещения, используя данные учетной записи пользователя AWS IAM. Сгенерированный пароль неверен, и я получаю его при подключении к Redshift.

Недопустимая операция: сбой аутентификации IAM для пользователя

Однако, если я уберу AWS_KEY и AWS_SECRET. Он читает из файла конфигурации aws, и сгенерированное DbPassword является правильным и работает. Я хочу сгенерировать DbPassword без использования файла конфигурации Aws. Поскольку мне нужно извлечь DbPassword на другом сервере, на котором я не могу создать этот файл конфигурации.

import json 
session = boto3.Session(region_name='region_name',
                       aws_access_key_id='AWS_KEY',
                       aws_secret_access_key='AWS_SECRET')
client = session.client('redshift')

creds = client.get_cluster_credentials(
        DbUser='user',
        DbName='db',
        ClusterIdentifier='test',
        DurationSeconds=3600,
        AutoCreate=True,
        DbGroups=['group'],
)

creds['DbPassword']

1 Ответ

0 голосов
/ 27 апреля 2018

Вводить учетные данные AWS в скрипт / программу считается плохой практикой. Это связано с тем, что учетные данные могут быть случайно сохранены в хранилище исходного кода и выведены «в дикой природе». Это также затрудняет поворот учетных данных.

То, как вы предоставляете учетные данные, не влияет на то, должен ли работать вызов API.

Тот факт, что ваш код работает, когда у вас нет учетных данных, встроенных в код, свидетельствует о том, что учетные данные, хранящиеся в вашем файле ~.aws/credentials, имеют правильные разрешения, а учетные данные, которые вы вставляете в код не имеют необходимых разрешений.

Поэтому вам следует сравнить учетные данные и определить, какие из них вы на самом деле хотите использовать.

Я бы порекомендовал вам создать конкретного пользователя IAM для этого приложения и ограничить разрешения, связанные с пользователем, только тем, что необходимо. Таким образом, если кто-то получает учетные данные, они ограничены в своих возможностях.

Более того, было бы лучше создать определенного пользователя в Amazon Redshift с помощью команды CREATE USER . Затем распределите пароль пользователя Redshift для каждого компьютера (так как им все равно потребуются учетные данные AWS, так почему бы просто не дать каждому компьютеру пароль?).

В качестве альтернативы используйте AWS Secrets Manager , чтобы безопасно сделать пароль доступным для других компьютеров. Таким образом, вы будете звонить в Secrets Manager, а не в get_cluster_credentials() API.

...