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

Unable to read or write any files using AWS Transfer for SFTP when using KMS encryption key

我已经根据 user guide 在 Amazon 新的 AWS Transfer for SFTP 托管 SFTP 服务下设置了一个服务器,但我无法让它与 KMS 加密密钥一起使用。我的 SFTP 客户端可以很好地进行身份验证,但是当我尝试 put 文件时,文件上传但随后无法保存并出现 Couldn't close file: Failure 错误。

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

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

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

  • 虽然我们在支持 S3 存储桶上启用了默认加密,但我们仍然制定了要求加密的政策。 AWS 在 之前 默认加密应用该策略,因此即使没有 --sse:aws:kms 标志的 aws s3 cp 命令也会失败。删除该策略使 aws s3 cp 使用默认加密策略。
  • 我们需要向附加到我们创建的 SFTP 用户的角色附加的策略添加一些 kms:XXX 权限。总之,我们的政策现在看起来像:
{
    "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 开始按预期工作。