AWS SageMaker S3 os.listdir()访问被拒绝

时间:2018-08-11 19:27:27

标签: amazon-web-services amazon-s3 jupyter-notebook amazon-sagemaker

我很困惑。

我采用了TensorFlow模型并将其移至SageMaker中进行试用。我将自己的数据放入s3存储桶中,设置了所有IAM角色/访问权限(或我认为)。我可以从s3中读取文件。我可以将新文件推送到s3。我可以从SageMaker本地目录中读取本地目录。

我无法遍历s3存储桶目录。我打开日志记录,每当尝试访问这种格式的URI时,都会收到AccessDenied消息's3:// my_bucketName_here / Directory_of_my_data /'< / strong>。

这是我所做的: 我已经确认我的笔记本使用了AmazonSageMaker-ExecutionRole-*** 我已将AmazonSageMakerFullAccess策略添加到该默认角色 随后,我还添加了AmazonS3FullAccess策略

然后我创建了一个存储桶策略,专门为特定存储桶授予s3:*访问该特定角色的权限。

哎呀,我最终使用ListObjects = Yes公开了存储桶。

os.listdir()只是失败,找不到文件或目录,并且使用AccessDenied创建了很多消息。 (TensorFlow库只是不起作用,所以我使用os.listdir()简化了事情。

最后,我从策略模拟器测试了我的访问权限-选择了上面提到的角色,选择了对s3进行测试,并选择了所有69项,它们全部通过。

但是我继续登录AccessDenied,实际上无法从我的SageMaker jupyter笔记本中列出目录的内容。

我很茫然。有想法吗?

编辑: 根据下面的建议,我有以下几点: 存储桶名称包含sagemaker:“ [已编辑] -test-sagemaker” 公众访问已关闭,唯一的帐户是我的根帐户。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::[redacted]-test-sagemaker" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::[redacted]-test-sagemaker/*" ] } ] } 和 arn:aws:iam :: aws:policy / AmazonSageMakerFullAccess

最后,失败上述操作后的存储桶策略: { "Id": "Policy1534116031672", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1534116026409", "Action": "s3:*", "Effect": "Allow", "Resource": "arn:aws:s3:::[redacted]-test-sagemaker", "Principal": { "AWS": [ "arn:aws:iam::[id]:role/service-role/AmazonSageMaker-ExecutionRole-***" ] } } ] }

1 个答案:

答案 0 :(得分:1)

因此您需要进行故障排除。这里有几件事要检查:

0)确保存储桶在SageMaker区域中。

1)在存储桶名称中包含字符串“ sagemaker”(例如, my_bucketName_here-sagemaker ,SageMaker可以直接使用这种方式命名的存储桶。

2)尝试使用SageMaker S3 default_bucket()

import sagemaker
s = sagemaker.Session()
s.upload_data(path='somefile.csv', bucket=s.default_bucket(), key_prefix='data/train')

3)在Notebook实例上打开终端,以尝试在bash中使用AWS CLI列出存储桶:

aws iam get-user
aws s3 ls my_bucketName_here

最后,在问题中粘贴存储桶的访问和资源政策可能会帮助其他人回答您。