【问题标题】:EC2 instance role gets 'Unknown' error when attempting aws s3 cp KMS encrypted file尝试 aws s3 cp KMS 加密文件时,EC2 实例角色出现“未知”错误
【发布时间】:2016-08-02 22:47:41
【问题描述】:

我有一个ASG,它为每个加入它的实例分配一个IAM Role。因此,每个实例都内置了AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量,它们将在实例化时用于下载和解密存储在S3 存储桶中并使用KMS 密钥加密的凭据。

所以我将拥有以下组件:

  • 一个名为top-secret.myapp.comS3 存储桶
  • 此存储桶中的所有对象都使用名为 My-KMS-KeyKMS 密钥加密
  • 一个带有内联策略的 IAM 实例角色,授予它与存储桶和用于加密/解密存储桶内容的 KMS 密钥交互的能力(见下文)
  • user data 脚本在实例化时安装aws-cli,然后尝试从top-secret.myapp.com 存储桶下载和解密对象。

用户数据脚本

实例化后,任何给定的实例都会运行以下脚本:

#!/bin/bash

apt-get update
apt-get -y install python-pip
apt-get -y install awscli

cd /home/ubuntu
aws s3 cp s3://top-secret.myapp.com/secrets.sh . --region us-east-1
chmod +x secrets.sh
. secrets.sh
shred -u -z -n 27 secrets.sh


IAM 角色政策

我的ASG 实例的IAM 角色内联附加了三个策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::top-secret.myapp.com"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:List*",
                "s3:Get*"
            ],
            "Resource": [
                "arn:aws:s3:::top-secret.myapp.com/secrets.sh"
            ]
        }
    ]
}

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:*"
            ],
            "Resource": "arn:aws:kms:us-east-1:UUID-OF-MY-SECRET-KEY-HERE"
        }
    ]
}

第一个策略本质上是没有限制的完全根访问策略。或者我是这么想的,但它不起作用。所以我认为我可能需要明确应用允许与S3 加密和/或KMS 交互的策略,这是有道理的。

所以我添加了第二个策略,允许IAM 实例角色列出top-secret.myapp.com 存储桶,以及LISTGET 存储桶内的secrets.sh 对象。但这产生了如下所示的错误。

我遇到的(未知)错误

download failed: s3://top-secret.myapp.com/secrets.sh to ./secrets.sh
A client error (Unknown) occurred when calling the GetObject operation: Unknown

有人知道是什么导致了这个错误吗?

注意:这种从 S3 传输加密机密并在实例上解密它们的方法可以使用标准 Amazon S3 service master key

【问题讨论】:

  • 因此,您的问题似乎与“aws s3 cp”命令有关,并且(目前)不涉及 KMS 的任何问题。该错误消息并不表明存在与权限相关的问题。您是否能够复制任何其他文件(例如从公共 S3 存储桶)?您是否尝试过 AWS CLI 的 --debug 选项?
  • 感谢您的建议,约翰。但绝对是KMS 这就是这里的问题。它适用于默认的S3 SSE 键,但不适用于我通过KMS 分配的任何键。这一定与任何给定资源所附带的政策有关,但我很难理解这些。本周晚些时候我将不得不回到这个话题。

标签: security encryption amazon-ec2 amazon-s3


【解决方案1】:

对我来说,问题有两个方面:

  1. 如果您通过 KMS 使用服务器端加密,则需要将 --sse aws:kms 标志提供给 aws s3 cp [...] 命令。
  2. 我正在通过apt 安装一个过时版本的awscli(版本1.2.9),而该版本无法识别--sse aws:kms 命令
    • 运行 apt-get remove awscli 并通过 pip install awscli 安装给了我 1.10.51 版,它工作正常。

编辑:

如果您使用的 KMS 密钥与您帐户的默认主密钥不同,您还需要添加以下标志:

--sse-kms-key-id [YOUR KMS KEY ID]

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2015-07-04
    相关资源
    最近更新 更多