Я создал несколько ролей, чтобы дать мне доступ к 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"]
У вас есть идеи, как решить эту проблему? Спасибо!