我有ASG
为每个加入它的实例分配IAM Role
。因此,每个实例都有烘焙的AWS_ACCESS_KEY_ID
和AWS_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.com
和LIST
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
答案 0 :(得分:1)
对我来说,这个问题有两个方面:
--sse aws:kms
命令提供aws s3 cp [...]
标志。awscli
安装过时的apt
版本(版本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]