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

AWS SageMaker S3 os.listdir() Access denied

我很难过。

我将我的 TensorFlow 模型移至 SageMaker 中进行试用。我将自己的数据放入 s3 存储桶中,设置所有 IAM roles/access(或者我认为如此)。我可以从 s3 读取文件。我可以将新文件推送到 s3。我可以从我的 SageMaker 本地目录读取本地目录。

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

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

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

哎呀,我最终用 ListObjects = Yes 完成了 public。

os.listdir() 简单地失败,文件或目录未找到,并且使用 AccessDenied 创建了很多消息。 (TensorFlow 库无法正常工作,所以我使用 os.listdir() 来简化事情。

最后,我从 Policy Simulator 测试了我的访问 - 我选择了上面提到的角色,选择测试 s3 并选择了所有 69 个项目,它们都通过了。

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

我很茫然。想法?

编辑: 根据下面的建议,我有以下内容: 存储桶名称包含 sagemaker:'[redacted]-test-sagemaker' Public 访问权限已关闭,唯一的帐户是我的 root 帐户。 { "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

最后是上面失败后的bucket policy: { "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-***" ] } } ] }

所以你需要排除故障。以下是一些需要检查的事项:

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) 在笔记本实例上打开终端,尝试在 bash:

中使用 AWS CLI 列出您的存储桶
aws iam get-user
aws s3 ls my_bucketName_here

最后,将存储桶的访问权限和资源策略粘贴到您的问题中可以帮助其他人回答您。