【问题标题】:AWS SageMaker: PermissionError: Access Denied - Reading data from S3 bucketAWS SageMaker:PermissionError:访问被拒绝 - 从 S3 存储桶读取数据
【发布时间】:2021-03-18 13:56:00
【问题描述】:

我正在使用 AWS SageMaker。我之前已经使用过它,并且从 S3 存储桶中读取数据没有问题。 所以,我设置了一个新的笔记本实例并 id 这个:

from sagemaker import get_execution_role
role = get_execution_role()

bucket='my-bucket'

data_key = 'myfile.csv'
data_location = 's3://{}/{}'.format(bucket, data_key)

df = pd.read_csv(data_location)

我得到的是这样的:

PermissionError: Access Denied

注意:我检查了 IAM 角色和政策,在我看来,我拥有访问 S3 存储桶的所有必要权限(已授予 AmazonS3FullAccess 等)。与之前的情况不同的是,我的数据是加密的。除了角色,我还有什么需要设置的吗?

编辑:

我使用的角色包含三个策略。这些是

  • AmazonS3FullAccess
  • AmazonSageMakerFullAccess

还有一个执行角色,我在其中添加了 kms:encrypt 和 kms:decrypt。它看起来像这样:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "xyz",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject",
                "kms:Encrypt",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

有什么遗漏吗?

【问题讨论】:

  • 您的角色需要对该存储桶的密钥拥有kms:decrypt 权限。
  • 如何修改或添加此权限?
  • 转到 IAM 控制台,选择合适的角色并在那里添加一个新权限,或者为 kms:decrypt for all resources * 或找出存储桶的特定 kms 密钥。
  • 好的,我想我在那里添加了必要的权限,但仍然出现此错误...存储桶也可以公开访问。
  • @luk2302:我编辑了我的问题。如果您能提供帮助,我会很高兴:)

标签: amazon-web-services amazon-s3 error-handling amazon-sagemaker


【解决方案1】:

您需要添加(或修改)一个 IAM 策略以授予对存储桶用于加密的密钥的访问权限:

{
  "Sid": "KMSAccess",
  "Action": [
    "kms:Decrypt"
  ],
  "Effect": "Allow",
  "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}

或者,您可以直接更改 KMS 密钥的密钥策略以直接授予 sagemaker 角色访问权限。 https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2021-02-21
    • 2019-04-28
    • 2021-02-25
    相关资源
    最近更新 更多