尝试aws s3 cp时,EC2实例角色出现“未知”错误KMS加密文件

时间:2015-05-03 01:04:57

标签: security encryption amazon-ec2 amazon-s3

我有ASG为每个加入它的实例分配IAM Role。因此,每个实例都有烘焙的AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量,这些变量将在实例化时用于下载和解密存储在S3存储桶中并使用{{ 1}}键。

所以我将拥有以下组件:

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

用户数据脚本

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

top-secret.myapp.com


IAM角色政策

我的#!/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

第一个策略本质上是一个没有限制的完全root访问策略。或者我想,但它不起作用。所以我认为可能需要明确应用允许与{ "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.comLIST GET对象桶。但是这产生了下面说明的错误。

我正在获取(未知)错误

secrets.sh

任何人都知道可能导致此错误的原因是什么?

  

注意:这种从S3传输加密机密并在实例上解密它们的方法可以正常使用标准download failed: s3://top-secret.myapp.com/secrets.sh to ./secrets.sh A client error (Unknown) occurred when calling the GetObject operation: Unknown

1 个答案:

答案 0 :(得分:1)

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

  1. 如果您通过KMS使用服务器端加密,则需要向--sse aws:kms命令提供aws s3 cp [...]标志。
  2. 我正在通过awscli安装过时的apt版本(版本1.2.9),该版本无法识别--sse aws:kms命令
    • 正在运行apt-get remove awscli并通过pip install awscli安装我的版本为1.10.51,该版本有效。
  3. 编辑:

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

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