使用KMS加密密钥时,无法使用AWS Transfer for SFTP读取或写入任何文件

时间:2018-12-05 18:15:53

标签: amazon-web-services amazon-s3 sftp aws-kms

我已经根据user guide在Amazon的新的适用于SFTP的AWS Transfer for SFTP管理的SFTP服务下设置了服务器,但是我无法使其与KMS加密密钥一起使用。我的SFTP客户端可以通过身份验证,但是当我尝试put进行文件传输时,该文件将上载,但无法保存,并出现Couldn't close file: Failure错误。

我在“关键用户”列表中具有与我的SFTP用户关联的角色,但是我怀疑“降级”策略中的某些内容(用于防止SFTP用户看到关联的S3存储桶中的其他文件夹)密钥被使用,因为我尝试删除降级策略,然后一切正常(但是这会使整个存储桶暴露给每个用户,这显然是不可接受的)。

有什么想法需要添加到降级策略(或密钥策略)中,以允许KMS密钥以这种方式使用?

1 个答案:

答案 0 :(得分:2)

我们发现了两个导致相同错误的问题:

  • 尽管我们在支持S3的存储桶上启用了默认加密,但是我们仍然有一项要求加密的策略。 AWS在默认加密之前 应用了该策略,因此即使没有aws s3 cp标志的--sse:aws:kms命令也会失败。删除该策略后,aws s3 cp使用了默认的加密策略。
  • 我们需要为策略所添加的一些kms:XXX权限,该策略与我们创建的SFTP用户的角色有关。总之,我们的政策如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "s3:ListBucket",
            "Resource": "${bucket_arn}",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "${bucket_arn}/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey"
            ],
            "Resource": "${kms_arn}",
            "Effect": "Allow"
        }
    ]
}

将其应用到用户后,SFTP便开始按预期运行。