2012-08-24 2 views
3

J'utilise des rôles AWS IAM qui permet une instance d'avoir accès à certaines ressources en utilisant les informations d'identification de l'API temporaire (clé d'accès, clé secrète et jeton de sécurité).Comment utiliser le rôle IAM pour accéder aux ressources à l'aide d'informations d'identification temporaires?

Lorsque je teste les informations d'identification temporaires utilisant ce script Ruby, il fonctionne sans aucun problème:

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 

Mais en utilisant la ligne de commande pour exécuter CFN-describe-piles je reçois une erreur:

export AWS_CREDENTIAL_FILE=aws_credentials.cfg 
cfn-describe-stacks 
cfn-describe-stacks: Refused: The security token included in the request is invalid 

et voici mon aws_credentials.cfg:

AWSAccessKeyId=MY ACCESS KEY 
AWSSecretKey=My SECRET KEY 
AWSToken="MY TOKEN==" 

Alors, que suis-je manque ici? Je vous remercie!

Répondre

1

Je ne pense pas que les outils de CLI prennent en charge les informations d'identification temporaires. Si c'est le cas, vous devriez pouvoir passer votre "AWSToken" dans un paramètre de ligne de commande. Mais selon le documentation, il ne supporte que le passage de l'identifiant de la clé d'accès et de la clé secrète en tant que paramètres.

-I, --access-key-id VALUE

Specify VALUE as the AWS Access ID to use.

-S, --secret-key VALUE

Specify VALUE as the AWS Secret Key to use.

+0

Je pense qu'il est pas encore pris en charge parce que le service des rôles IAM est encore nouveau (environ un mois). J'ai regardé dans la documentation, des forums, googlé beaucoup mais il semble qu'il n'y a pas de support pour le moment. En tout cas, merci pour votre réponse. – PapelPincel

3

Ceci est facile avec un script de données utilisateur. Par exemple, cet extrait capture vos informations d'identification temporaires et télécharge une ressource à partir de S3. Je l'utilise pour le déploiement de 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 

Déposez-le dans votre modèle CloudFormation et consignez-le de façon appropriée. Ça va marcher comme un charme. Vous pouvez utiliser instance profiles avec LaunchConfigs et EC2 resources aucun problème. Je suis 100% confiant de cela. Il était en contact avec AWS lorsque leurs docs ont ajouté ces références à la documentation.

+1

Nice. Pour se débarrasser du rôle codé en dur, vous pouvez faire: 'ROLE == $ (curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/)', puis 'CREDENTIALS = $ (curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$ {ROLE}) ' – GalacticJello

+0

Aussi, le dernier sdk AWS ruby ​​ne nécessite pas de passer dans la clé, secret, et jeton. Il les utilisera dans les coulisses si un rôle d'instance est utilisé. Ainsi, la ligne AWS.config et les accréditifs ci-dessus ne sont plus nécessaires dans le dernier SDK. – GalacticJello

+0

Oh c'est spectaculaire. Je vais définitivement mettre à jour mes scripts en conséquence. Donc, je peux passer la spécification des informations d'identification entièrement? – Christopher

Questions connexes