Как правильно / безопасно получить доступ к параметрам из хранилища параметров AWS SSM для моего скрипта Python в экземпляре EC2?

У меня есть сценарий Python, который я хочу запустить, и отправить мне текстовое уведомление, если выполнено определенное условие. Я использую Twilio, поэтому у меня есть токен API Twilio, и я хочу сохранить его в секрете. У меня он успешно работает локально, и теперь я работаю над его запуском на экземпляре EC2.

Что касается шагов AWS, я создал пользователя IAM с разрешениями, запустил экземпляр EC2 (и сохранил ключи ssh) и создал некоторые параметры в хранилище параметров AWS SSM. Затем я подключился к экземпляру по ssh и установил boto3. Когда я пытаюсь использовать boto3 для получения параметра, я не могу найти учетные данные:

# test.py
import boto3

ssm = boto3.client('ssm', region_name='us-west-1')

secret = ssm.get_parameter(Name='/test/cli-parameter')
print(secret)

# running the file in the console
>> python test.py
...
    raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

Я почти уверен, что это означает, что он не может найти учетные данные, которые были созданы, когда я запустил aws configure и создал файл .aws / credentials. Я считаю, что причина этого в том, что я запускал aws configure на своем локальном компьютере, а не запускал его, пока ssh подключился к экземпляру. Я сделал это, чтобы сохранить свой AWS ID и секретный ключ в моем экземпляре EC2, потому что я думал, что должен сохранить этот секретный код и не помещать токены / ключи в свой экземпляр EC2. Я думаю, что могу решить эту проблему, запустив aws configure в то время как ssh'd в моем экземпляре, но я хочу понять, что произойдет, если на моем фактическом экземпляре EC2 есть файл .aws / credentials, и опасно ли это. Я просто не уверен, как все это должно быть структурировано, или каков безопасный / правильный способ запуска моего скрипта и доступа к секретным переменным.

Любое понимание вообще полезно!


person dtluther    schedule 21.02.2021    source источник


Ответы (1)


Я подозреваю, что ответ, который вы ищете, выглядит примерно так:

  1. Создайте политику IAM, которая разрешает доступ к параметру SSM (почему бы не использовать SecretStore?)
  2. Прикрепите эту политику IAM к роли.
  3. Прикрепите роль к своему экземпляру EC2 (профиль экземпляра)
  4. boto3 теперь будет автоматически собирать секретный ключ AWS и т. д. из службы метаданных, когда ему нужно взаимодействовать с хранилищем параметров.
person xH7UuDv2CW    schedule 21.02.2021
comment
Привет. Я думаю, если бы вы могли предоставить ссылку на то, что такое профиль экземпляра, метаданные экземпляра, это помогло бы улучшить ваш ответ. - person Marcin; 21.02.2021
comment
@ xH7UuDv2CW, думаю, у меня 1-3. Я создал пользователя, который находится в группе с политикой AdministratorAccess. Это должно позволить им получить доступ к параметрам, верно? Что касается №4, я думаю, что меня смущает, нормально ли иметь файл .aws / credentials на фактическом экземпляре EC2 (что, я думаю, произойдет, если я запустил aws configure, когда ssh'd в моем экземпляре) . - person dtluther; 21.02.2021
comment
@ xH7UuDv2CW на самом деле я пропустил шаг №3. Я не понимал, что вы добавляете роль специально для своего экземпляра EC2. Я добавил EnablesEC2ToAccessSystemsManagerRole в свой экземпляр EC2. Теперь, когда я запускаю aws configure list, он показывает идентификатор доступа и ключ. Мой журнал отладки ботокора показывает, что он обнаружил учетные данные из роли IAM: EnablesEC2ToAccessSystemsManagerRole. Спасибо за помощь! - person dtluther; 21.02.2021