Проблемы с ролями AWS - запуск контейнеров в SageMaker - PullRequest
0 голосов
/ 08 апреля 2020

Я создал несколько ролей, чтобы дать мне доступ к S3 и другим службам через AWS SageMaker, и он отлично работает, когда я запускаю коды на ноутбуках.

Затем я превращаю код в .py файл для запуска в контейнере. Моя последняя цель - запустить образ на AWS Batch, поэтому я создал роли, касающиеся EC2 и Batch. Но перед отправкой изображения в ECR я тестирую его в SageMaker, запустив контейнер.

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

1) Когда я пытаюсь прочитать файл на S3, он нормально работает на ноутбуке SageMaker или в пакетном режиме, но когда я запускаю контейнер на SageMaker, доступ к S3 запрещается.

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

2) Когда я использую AssumeRole, он отлично работает на ноутбуке SageMaker и в пакетном режиме, но когда я запускаю контейнер на SageMaker, возникает следующая ошибка:

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::someUser:assumed-role/BaseNotebookInstanceEc2InstanceRole/codeRole is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::myAccount:role/myRole

Обратите внимание, что "someUser "вымышленный пользователь, созданный случайным образом с несколькими учетными записями, которые не являются моими, и я не знаю, откуда это число пришло. Я хочу, чтобы это работало с использованием ролей, и я ни в коем случае не должен использовать ключи доступа. Если это помогает, мой Dockerfile имеет следующие шаги:

FROM python:3.7
RUN apt-get update -y
RUN apt-get install python3-pip -y
RUN pip install --upgrade pip
RUN pip install numpy==1.17.3
RUN pip install pandas==0.24.1
RUN pip install boto3==1.11.5
RUN pip install s3fs==0.4.0

RUN mkdir /src
COPY . /src

CMD ["python", "/src/my File.py"]

У вас есть идеи, как решить эту проблему? Спасибо!

1 Ответ

1 голос
/ 17 апреля 2020

Когда вы выполняете пакетный вывод на экземпляре ноутбука или на платформе Batch, вы уже вошли в свою учетную запись AWS, поэтому сценарий Python может успешно выполняться.

Однако, когда вы выполняете код (выбираете ресурсы из корзины S3 и т. д. c), пользователь может не иметь доступа к вашим токенам AWS (зависит от конфигурации aws).

Удалось ли вам получить get_caller_identity, когда вы запустили код Python в контейнере? Для получения дополнительной информации о ролях и разрешениях см. Документацию здесь: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html

Также, пожалуйста, проверьте политику S3 Bucket, чтобы убедиться, что ваш объект доступен для SageMaker и вашей учетной записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...