amazon-web-services - AWS SageMaker S3 os.listdir() 访问被拒绝
问题描述
我被难住了。
我将我的 TensorFlow 模型移到 SageMaker 中进行试用。我将自己的数据放入 s3 存储桶中,设置所有 IAM 角色/访问权限(或者我认为如此)。我可以从 s3 读取文件。我可以将新文件推送到 s3。我可以从我的 SageMaker 本地目录中读取本地目录。
我无法遍历我的 s3 存储桶目录。 我打开了日志记录,每当我尝试访问这种格式's3://my_bucketName_here/Directory_of_my_data/'的 URI 时,都会收到 AccessDenied 消息。
这是我所做的: 我已经确认我的笔记本使用了 AmazonSageMaker-ExecutionRole-*** 我已将 AmazonSageMakerFullAccess 策略添加到该默认角色我随后也添加了 AmazonS3FullAccess 策略
然后,我创建了一个存储桶策略,专门将特定存储桶上的 s3:* 访问权限授予该特定角色。
哎呀,我最终使用 ListObjects = Yes 公开了存储桶。
os.listdir() 只是因为找不到文件或目录而失败,并且使用 AccessDenied 创建了很多消息。(TensorFlow 库只是不起作用,所以我使用 os.listdir() 来简化事情。
最后,我从策略模拟器测试我的访问 - 我选择了上面提到的角色,选择了测试 s3 并选择了所有 69 个项目,它们都通过了。
但是我继续记录 AccessDenied 并且实际上无法从我的 SageMaker jupyter 笔记本中列出目录的内容。
我不知所措。想法?
编辑:根据下面的建议,我有以下内容:存储桶名称包含 sagemaker:'[redacted]-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-***"
]
}
}
]
}
解决方案
所以你需要排除故障。这里有几件事要检查:
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
最后,在您的问题中粘贴存储桶的访问和资源策略可以帮助其他人回答您。
推荐阅读
- node.js - 如何创建应排除无关 dto 属性的单元测试?
- r - geom_segment 箭头设置 - 头部与线的宽度相同
- node.js - 将节点 js 网站托管到 Azure。默认路径/不工作
- android-studio - 通过选定的应用程序过滤 logcat *并*在 Android Studio 中添加自定义过滤器
- java - Reactor - 如何避免递归?
- python-3.x - yaml 转储没有引号的 python 字典
- python - 使用字典的值过滤数据框
- python - 如何从我从 Python 中的 GitHub 职位开放 API 以 .json 格式获得的列表中确定给定技术的职位数量?
- r - 如何在 r 中随机保留一个重复的行(不是第一个重复的行)
- spring-boot - Spring Boot API Gateway 无法解析名称