4

インスタンスが一時的なAPIクレデンシャル(アクセスキー、シークレットキー、セキュリティトークン)を使用して特定のリソースにアクセスできるようにするAWSIAMロールを使用しています。

この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=="

だから私はここで何が欠けていますか?ありがとうございました!

4

2 に答える 2

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テンプレートにドロップして、適切にログに記録します。それは魅力のように機能します。LaunchConfigsおよびEC2リソースでインスタンスプロファイルを問題なく使用できます。私はこれに100%自信があります。ドキュメントの担当者がこれらの参照をドキュメントに追加したとき、AWSと連絡を取りました。

于 2012-08-27T17:25:39.953 に答える
1

CLIツールが一時的なクレデンシャルをサポートしているとは思いません。もしそうなら、あなたはあなたの「AWSToken」をコマンドラインパラメータとして渡すことができるはずです。ただし、ドキュメントによると、アクセスキーIDとシークレットキーをパラメータとして渡すことのみがサポートされています。

-I、-access-key-id VALUE

使用するAWSアクセスIDとしてVALUEを指定します。

-S、-secret-key VALUE

使用するAWSシークレットキーとしてVALUEを指定します。

于 2012-08-24T16:25:23.273 に答える