【问题标题】:Unable to download files from S3 after KMS encryptionKMS 加密后无法从 S3 下载文件
【发布时间】:2019-06-15 05:13:50
【问题描述】:

使用 terraform,我可以创建启用 KMS 加密的 S3 存储桶。但是当我尝试从启用 S3 KMS 的存储桶中下载任何文件时,它无法下载说 Access Denied

错误日志:-

download failed: s3://services-1234567890-cicd-storage/jars/jdbc-0.211.jar to utilities/jdbc-0.211.jar An error occurred (AccessDenied) when calling the GetObject operation: Access Denied

main.tf

resource "aws_s3_bucket" "s3_bucket_two" {
  bucket = "dev-analytics-data"
#  bucket = "services-${lookup(var.aws_account_id, terraform.workspace)}-cicd-storage"
  acl    = "${var.acl}"
  versioning {
    enabled = "${var.enable_versioning}"
  }
  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        kms_master_key_id = "${data.terraform_remote_state.kms_s3.key_arn}"
        sse_algorithm     = "aws:kms"
      }
    }
  }
}

使用的 IAM 政策:-

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::12345678910:role/iam_role_devops_engineer",
                    "arn:aws:iam:: 12345678910:role/EMR_AutoScaling_DefaultRole",
                    "arn:aws:iam:: 12345678910:role/EMR_DefaultRole",
                    "arn:aws:iam:: 12345678910:user/iam_user_cng_jenkins",
                    "arn:aws:iam:: 12345678910:role/iam_role_sftp",
                    "arn:aws:iam:: 12345678910:role/iam_role_jenkins_user",
                    "arn:aws:iam:: 12345678910:role/EMR_EC2_DefaultRole"
                ]
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::services-12345678910-cicd-storage",
                "arn:aws:s3:::services-12345678910-cicd-storage/*"
            ]
        }
    ]
}

我也尝试通过 aws cli 上传,但仍然失败。

aws s3 cp --sse aws:kms --sse-kms-key-id arn:aws:kms:eu-central-1:1234567890:key/123asdps-as34-as23-asas-aslkui98393 spark-sql-kinesis_2.11-2.3.1.jar s3://services-1234567890-cicd-storage/tesie_jars/

【问题讨论】:

标签: amazon-web-services amazon-s3 terraform aws-cli aws-kms


【解决方案1】:

您需要在 IAM 策略中授予对 KMS 密钥的访问权限。

我不是 100% 确定您需要的权限,但从这些开始(我碰巧知道这组有效,因为我从工作策略中复制了它,但它可能包含不需要的权限):

{
    "Effect": "Allow",
    "Action": [
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:GetKeyPolicy",
        "kms:ListGrants",
        "kms:ListKeyPolicies",
        "kms:ListRetirableGrants",
        "kms:ReEncryptFrom",
        "kms:ReEncryptTo"
    ],
    "Resource": "arn:aws:kms:REDACTED:REDACTED:key/REDACTED"
},
{
    "Effect": "Allow",
    "Action": [
        "kms:GenerateRandom",
        "kms:ListAliases",
        "kms:ListKeys"
    ],
    "Resource": "*"
}

【讨论】:

  • 下载KMS加密文件时,只需要访问“kms:Decrypt”
【解决方案2】:

您提到加密后无法检索对象;您可以在不加密的情况下从同一个存储桶中检索对象吗?我问是因为加密不是访问控制;它是读取控制。访问控制列表 (ACL) 是访问控制。

【讨论】:

  • 是的,我能够在 KMS 加密之前访问 S3 存储桶。我之前使用了默认加密(AES-256)。
猜你喜欢
  • 2019-09-21
  • 2021-03-28
  • 2019-09-12
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2018-04-04
  • 2017-02-16
相关资源
最近更新 更多