首页 > 解决方案 > 使用带有别名的 KMS 加密存储桶中的 s3:GetObject

问题描述

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

{
    "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 Key ARN 放在 Resource 中,它就可以工作。我不确定为什么 GetObject 在 PutObjects 工作时不工作。

标签: amazon-web-servicesamazon-s3devopsamazon-iamamazon-kms

解决方案


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


推荐阅读