ботокор.исключения.ProfileNotFound — Передача учетных данных AWS в образ docker

#amazon-web-services #docker #aws-credentials

Вопрос:

Похоже, с этой проблемой сталкивались многие люди, но решения, которые я пробовал, не решили ее:

У меня есть приложение на python, которое я закрепил и которое я хочу перенести в контейнер EC2, однако после закрепления у приложения возникают проблемы (локально) с доступом к моим учетным данным AWS:

 santeau_session = boto3.Session(profile_name='Santeau')
db = santeau_session.resource('dynamodb',  region_name='us-west-2')
MainPage = db.Table('mp')
 

Когда пытаешься пройти мимо них таким образом: docker run -v $HOME/.aws/credentials:/home/app/.aws/credentials:ro ks/mz
Я получаю:

 Traceback (most recent call last):  File "./main.py", line 17, in <module>
    santeau_session = boto3.Session(profile_name='Santeau')
  File "/usr/local/lib/python3.8/site-packages/boto3/session.py", line 80, in __init__
    self._setup_loader()
  File "/usr/local/lib/python3.8/site-packages/boto3/session.py", line 120, in _setup_loader
    self._loader = self._session.get_component('data_loader')
  File "/usr/local/lib/python3.8/site-packages/botocore/session.py", line 698, in get_component
    return self._components.get_component(name)
  File "/usr/local/lib/python3.8/site-packages/botocore/session.py", line 937, in get_component
    self._components[name] = factory()
  File "/usr/local/lib/python3.8/site-packages/botocore/session.py", line 158, in <lambda>
    lambda:  create_loader(self.get_config_variable('data_path')))
  File "/usr/local/lib/python3.8/site-packages/botocore/session.py", line 251, in get_config_variable
    return self.get_component('config_store').get_config_variable(
  File "/usr/local/lib/python3.8/site-packages/botocore/configprovider.py", line 313, in get_config_variable
    return provider.provide()
  File "/usr/local/lib/python3.8/site-packages/botocore/configprovider.py", line 410, in provide
    value = provider.provide()
  File "/usr/local/lib/python3.8/site-packages/botocore/configprovider.py", line 471, in provide
    scoped_config = self._session.get_scoped_config()
  File "/usr/local/lib/python3.8/site-packages/botocore/session.py", line 351, in get_scoped_config
    raise ProfileNotFound(profile=profile_name)
botocore.exceptions.ProfileNotFound: The config profile (Santeau) could not be found
 

Мой файл учетных данных выглядит (вроде) так, и приложение правильно подключается, если оно не запущено с docker:

 aws_access_key_id = ------------------
aws_secret_access_key = ------------------
[Santeau]
aws_access_key_id = ------------------
aws_secret_access_key = ------------------
 

Почему он работает отстыкованным, но не закрепленным, и как я могу это решить ?

Ответ №1:

Я предполагаю, что ваш контейнер docker работает не от имени пользователя и не с тем домом, который вы ожидаете. Я заметил, что ты жестко закодирован /home/app/.aws/credentials

Вы должны войти в свой контейнер и узнать, от имени какого пользователя он работает и где находится ваш дом. Вы можете запустить aws configure , а затем найти, где хранились файлы учетных данных.

Многие запускаются от имени root, поэтому ваша команда будет выглядеть примерно так docker run -v ~/.aws/:/root/.aws:ro your_image

Изменить: В качестве альтернативы вы можете напрямую передать переменную среды AWS_SHARED_CREDENTIALS_FILE вашего местоположения файла. Вот дополнительная информация: https://boto3.amazonaws.com/v1/documentation/api/1.9.42/guide/configuration.html

Комментарии:

1. «запуск docker-v ~/.aws/:/root/.aws:ro your_image» сработал, спасибо