我正在使用AWS IAM角色,该角色允许实例使用临时API凭据(访问密钥,密钥和安全令牌)访问某些资源。
当我使用这个ruby脚本测试临时凭证时,它运行没有任何问题:
require 'rubygems'
require 'aws-sdk'
AWS.config(
:access_key_id => "MY ACCESS KEY GOES HERE",
:secret_access_key => "MY SECRET KEY GOES HERE",
:session_token => "MY TOKEN GOES HERE")
s3 = AWS::S3.new()
myfile = s3.buckets['My-Config'].objects["file.sh"]
File.open("/tmp/file.sh", "w") do |f|
f.write(myfile.read)
end
但是当使用命令行运行cfn-describe-stacks时,我收到一个错误:
export AWS_CREDENTIAL_FILE=aws_credentials.cfg
cfn-describe-stacks
cfn-describe-stacks: Refused: The security token included in the request is invalid
这是我的aws_credentials.cfg:
AWSAccessKeyId=MY ACCESS KEY
AWSSecretKey=My SECRET KEY
AWSToken="MY TOKEN=="
那我在这里缺少什么?谢谢!
答案 0 :(得分:3)
使用用户数据脚本很容易。例如,此代码段将获取临时凭据并从S3下载资源。我将它用于WAR部署。
# Install updates and dependencies
yum -y install ruby-devel
yum -y install rubygems
yum install -y rubygem-nokogiri
gem install --no-rdoc --no-ri aws-sdk
gem install --no-rdoc --no-ri json
# Grab credentials and parse them
CREDENTIALS=$(curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access)
S3_ACCESS_KEY=$(echo $CREDENTIALS | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['AccessKeyId'];")
S3_SECRET_KEY=$(echo $CREDENTIALS | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['SecretAccessKey'];")
S3_TOKEN=$(echo $CREDENTIALS | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['Token'];")
# Download myFile
cat << EOF > /etc/getFile.rb
require 'rubygems'
require 'aws-sdk'
AWS.config(
:access_key_id => "$S3_ACCESS_KEY",
:secret_access_key => "$S3_SECRET_KEY",
:session_token => "$S3_TOKEN")
s3 = AWS::S3.new()
myfile = s3.buckets['mybucket'].objects["myFile"]
File.open("myLocalFile", "w") do |f|
f.write(myfile.read)
end
EOF
ruby /etc/getFile.rb
将其放入您的CloudFormation模板并正确记录。它会像魅力一样工作。您可以将instance profiles与LaunchConfigs一起使用,EC2 resources也没问题。我100%对此充满信心。当他们的文档人员将这些引用添加到文档时,它与AWS保持联系。
答案 1 :(得分:1)
我认为CLI工具不支持临时凭证。如果他们这样做,您应该能够将“AWSToken”作为命令行参数传递。但是根据documentation,它只支持传入访问密钥id和密钥作为参数。
-I, - access-key-id VALUE
指定VALUE作为要使用的AWS Access ID。
-S, - secret-key VALUE
指定VALUE作为要使用的AWS密钥。