我很困惑。
我采用了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-***"
]
}
}
]
}
答案 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
最后,在问题中粘贴存储桶的访问和资源政策可能会帮助其他人回答您。