AWS SageMaker: PermissionError: Access Denied - Reading data from S3 bucket

AWS SageMaker: PermissionError: Access Denied - Reading data from S3 bucket

我正在使用 AWS SageMaker。我以前用过它,从 S3 存储桶读取数据时没有遇到任何问题。 因此,我设置了一个新的笔记本实例并标识为:

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 等)。与之前的情况不同的是,我的数据是加密的。除了角色之外,我还需要设置什么吗?

编辑:

我使用的角色由三个策略组成。这些是

和一个执行角色,我在其中添加了 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:::*"
        }
    ]
}

是不是少了什么?

您需要添加(或修改)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/