为什么无法从Braket Notebook访问S3存储桶?

0

【以下的问题经过翻译处理】 你好,

我正在尝试使用AWS Braket为一项大型研究项目做准备。作为试用过程的一部分,我正在尝试从我创建的S3 bucket中加载数据到pandas DataFrame中。我使用的脚本如下:

import sagemaker
import boto3
import pandas as pd

sagemaker_session = sagemaker.Session()
role = sagemaker.get_execution_role()

bucket='test'
file_name = 'sine.txt'

file_obj = boto3.client('s3').get_object(Bucket=bucket, Key=file_name)

df = pd.read_csv( file_obj['Body'], delimiter=' ')

不幸的是,在braket笔记本中运行它会导致以下错误:

ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied

我四处搜索后发现,这应该是Brakets缺少IAM角色造成的。然而,根据我的身份和访问管理,所需的AWSServiceRoleForAmazonBraket角色已经激活。 Screenshot of AWSServiceRoleForAmazonBraket in IAM console

我花费了几个小时的时间搜索,但是所有潜在的解决方案都导致相同(或类似)的错误。这就是我来这里寻求帮助的原因。请问有人能告诉我如何解决这个问题吗?

1 回答
0

【以下的回答经过翻译处理】 你说得对,当你启动新笔记本时默认角色只能访问以“amazon-braket-”开头的S3存储桶。这是AmazonBraketFullAccess策略的相应语句(它附加在我们默认笔记本角色上)。

        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:CreateBucket",
                "s3:PutBucketPublicAccessBlock",
                "s3:PutBucketPolicy"
            ],
            "Resource": "arn:aws:s3:::amazon-braket-*"
        },

如果您的存储桶名称为“amazon-braket-test”而不是“test”,则应该可以正常工作。最简单的方法是在整个过程中使用此命名约定。

如果您想使用名称为“test”的存储桶,则需要自定义附加到笔记本的角色(我无法确定您以上修改权限的角色)。例如,您可以在上面的片段中添加另一个资源:

        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:CreateBucket",
                "s3:PutBucketPublicAccessBlock",
                "s3:PutBucketPolicy"
            ],
            "Resource": [
                "arn:aws:s3:::amazon-braket-*",
                "arn:aws:s3:::test"
            ]
        },

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则