亚马逊SageMaker从S3下载文件

7
我正在将MIDI文件存储在S3桶中,并尝试将它们下载到SageMaker jupyter笔记本中。我正在使用以下代码:
import os
import boto3  # Python library for Amazon API 
import botocore
from botocore.exceptions import ClientError
def download_from_s3(url):
    """ex: url = s3://sagemakerbucketname/data/validation.tfrecords"""
    url_parts = url.split("/")  # => ['s3:', '', 'sagemakerbucketname', 'data', ...
    bucket_name = url_parts[2]
    key = os.path.join(*url_parts[3:])
    filename = url_parts[-1]
    if not os.path.exists(filename):
        try:
            # Create an S3 client
            s3 = boto3.resource('s3')
            print('Downloading {} to {}'.format(url, filename))
            s3.Bucket(bucket_name).download_file(key, filename)
        except botocore.exceptions.ClientError as e:
            if e.response['Error']['Code'] == "404":
                print('The object {} does not exist in bucket {}'.format(
                    key, bucket_name))
            else:
                raise

然而,在调用HeadObject操作时,我遇到了一个错误(403):拒绝访问。

这里是S3附加的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}
1个回答

4
您正在使用的S3存储桶 sagemakerbucketname 应该和Sagemaker Notebook实例在同一区域。与笔记本实例关联的IAM角色应该被授予访问S3存储桶的权限。
在Sagemaker笔记本中运行以下命令以获取IAM角色: role = get_execution_role() 验证用于启动笔记本的角色具有访问S3存储桶的权限。您应该具备下列所需的权限:
``` { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::sagemakerbucketname" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::sagemakerbucketname/*" ] } ```

1
它具有完整的S3权限,并且位于相同的区域。 - pd109
我已经更新了Sagemaker访问S3存储桶所需的权限。 - raj
我很困惑,因为我已经尝试多次更改区域和权限。我的角色具有完整的S3权限,包括上面列出的所有权限以及更多权限。是否还有其他原因导致我出现此错误? - pd109
你的Sagemaker实例和Bucket是否在同一区域? - raj
1
我相信是的,Sagemaker的arn为arn:aws:sagemaker:us-east-2:267752861345:notebook-instance/musicresearch,而S3显示它的区域为美国东部(俄亥俄州)。如果我在另一个国家使用我的计算机,这是否有影响,因为它们位于美国东部? - pd109

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接