Можно ли указать параметры изображения ECR на AWS

Я создал этот образ докера, который я буду запускать следующим образом. docker run -e AWS_ACCESS_KEY_ID=<my-access-key> -e AWS_SECRET_ACCESS_KEY=<my-secret-access-key> -it --rm -p 9000:8080 etl_pipeline:latest В основном смотрю на -e параметры. Так что при локальном запуске этого образа все работает нормально. Но я запускаю это с помощью лямбда-функции, которая запускает образ ECR. Но я получаю ошибку запрещенного разрешения при чтении из моего ведра S3. Сначала я подумал, что что-то не так с моими разрешениями на мое ведро, но я изменил разрешения, и все должно быть в порядке. Но потом я забыл, что запускаю этот контейнер с этими параметрами. Итак, как я могу ввести эти параметры в свой образ ECR или мне следует изменить свой Dockerfile, мой Dockerfile теперь выглядит так.

ENV POETRY_VERSION=1.4.0

RUN pip install "poetry==$POETRY_VERSION"

WORKDIR ${LAMBDA_TASK_ROOT}

COPY . ${LAMBDA_TASK_ROOT}/

ENV AWS_ACCESS_KEY_ID=
ENV AWS_SECRET_ACCESS_KEY=

RUN poetry config virtualenvs.create false 
RUN poetry install --only main --no-interaction --no-ansi

CMD [ "app.handler" ]

Поэтому я предполагаю, что, поскольку я запускаю его на AWS, есть какой-то способ включить туда мои ключи доступа. Вся помощь очень ценится!

Где вы запускаете команду docker run? На экземпляре EC2? Тот факт, что образ докера хранится в репозитории ECR, на самом деле не имеет значения, это все еще просто образ докера. Детали того, где вы запускаете образ (например, на сервере EC2?), более важны.

Mark B 18.04.2023 13:38

Я запускаю его через лямбда-функцию. Так что я на самом деле не запускаю команду docker run сам, я думаю, у Lambda есть для этого значение по умолчанию? Я действительно новичок в AWS, так что извините, если я действительно не понимаю, что вы имеете в виду?

david backx 18.04.2023 15:39

Тот факт, что вы запускаете его в Lambda, является важной информацией, которую вы полностью упустили из виду. Вы должны назначить роль IAM функции Lambda.

Mark B 18.04.2023 15:51

Эй, Марк, я упоминал, что запускал его на лямбда-функции, я только что решил свою проблему с добавлением политики к моей лямбда-функции, чтобы она могла получить доступ к моей корзине S3. Извините, если мой вопрос был не ясен, но спасибо за вашу помощь!

david backx 18.04.2023 16:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Крайне не рекомендуется использовать ключ доступа IAM и секретный ключ в контейнере IMAGE, что может привести к высокому риску.

Вместо этого вы можете использовать роли IAM с соответствующими политиками (разрешения, равные ключу доступа) во время подготовки контейнера через ECS или EKS.

Ответ принят как подходящий

Как указано в ответе @ctgopinaath, действительно нехорошо использовать ваши ключи доступа AWS в качестве переменных в вашем образе докера. Если вы, например, хотите, чтобы ваша лямбда-функция обращалась к вашей корзине s3, как мне нужно, перейдите в консоль IAM, создайте роль для доступа к вашей корзине s3, это может выглядеть так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::YOUR_BUCKET"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::YOUR_BUCKET/*"
            ]
        }
    ]
}

Это гарантирует, что вы можете выполнять все необходимые действия в своей корзине s3 (если вам нужен только доступ для чтения, убедитесь, что вы не даете полных разрешений, как в приведенном выше примере). Затем вы можете просто прикрепить эту политику к роли выполнения вашей лямбда-функции AWS. Вы можете сделать это, сначала проверив, какая роль выполнения находится в вашей функции. Затем перейдите в консоль IAM, щелкните только что созданную политику -> Прикрепить и найдите свою роль исполнения. Теперь все должно работать.

Другие вопросы по теме