Amazon web services AWS角色的问题-在SageMaker中运行容器

Amazon web services AWS角色的问题-在SageMaker中运行容器,amazon-web-services,amazon-s3,boto3,Amazon Web Services,Amazon S3,Boto3,我创建了许多角色,通过AWS SageMaker让我可以访问S3和其他服务,当我在笔记本上运行代码时,它工作得很好 然后,我将代码转换成一个.py文件,在容器中运行它。我的最终目标是在AWS批处理上运行映像,因此我创建了有关EC2和批处理的角色。但在将图像发送到ECR之前,我通过运行容器在SageMaker上进行了测试 发生的情况是,容器在批处理上运行良好,但在SageMaker上却没有,我有两个问题: 1) 当我尝试在S3上读取文件时,它在SageMaker笔记本或批处理上运行良好,但当我在S

我创建了许多角色,通过AWS SageMaker让我可以访问S3和其他服务,当我在笔记本上运行代码时,它工作得很好

然后,我将代码转换成一个.py文件,在容器中运行它。我的最终目标是在AWS批处理上运行映像,因此我创建了有关EC2和批处理的角色。但在将图像发送到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"]

你知道如何解决这个问题吗?谢谢大家!

在笔记本实例或批处理平台上执行批处理推断时,您已经登录到AWS帐户,因此Python脚本可以成功运行

但是,当您执行代码(从S3 bucket获取资源等)时,用户可能无法访问您的AWS帐户令牌(取决于您的AWS配置)

当您在容器中运行Python代码时,是否能够获得调用方身份?有关角色和权限的详细信息,请参阅此处的文档:

另外,请检查您的S3 bucket策略,以确保SageMaker和您的帐户可以访问您的对象