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

Jud*_*Jud 4 sftp amazon-s3 amazon-web-services aws-kms

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

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

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

Kir*_*ser 6

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

  • 尽管我们在我们的支持 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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

将其应用于用户使 SFTP 开始按预期工作。