使用带有别名的 KMS 加密存储桶中的 s3:GetObject

Using s3:GetObject from KMS encrypted Bucket with an Alias

我正在尝试使用 KMS 密钥别名从 S3 获取对象,该对象在 put 对象使用相同策略时不起作用。我的政策如下所示

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::primary-db-backups-XXXXX"
        },
        {
            "Sid": "AllowGetPutPostgresBackups",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::primary-db-backups-XXXXX/*"
            ]
        },
        {
            "Sid": "AllowS3KMS",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:RequestAlias": "alias/infra_s3_key"
                }
            }
        }
    ]
}

我得到的错误是

download failed: s3://primary-db-backups-XXXXX/ip15000_2021-10-19T02-37-52.sql to - An error occurred (AccessDenied) when calling the GetObject operation: Access Denied

如果我将 KMS 密钥 ARN 放入资源中,它就会起作用。我不确定为什么 GetObject 不工作而 PutObjects 工作。

这可能是因为 S3 通过其 ARN 而不是 alias 调用 KMS 密钥。仅当 S3 对 KMS 的 API 调用本身使用 alias/infra_s3_key 时,您才可以使用 alias/infra_s3_key。但它可能使用密钥 ARN,因此只有使用 KMS 密钥 ARN 的条件才有效。