- 今までIPアドレスで利用範囲を絞っていたところを、このEC2インスタンスから!みたいな制約で利用できるようにする機能
- aws-sdkを使えばcredentials周りのコードを簡略化できる
- roleは、EC2インスタンス起動時に選択することができる
- roleは1つしか割り当てられない
- 既存のインスタンスにはroleを割り当てることはできない
- 既にroleが割り当てられているインスタンスからroleを外すことはできない
- roleのPermissionsの変更は即時反映される
AWS ConsoleのIAMのところからCreate Roleをクリック roleの名前を入力してContinue 適当なPolicyをSelect(後から編集もできるのでてきとーに) Policyの名前を決めて、Policy Documentを確認したらContinue 内容を確認して問題なければCreate Role はい、出来上がりましたヾ(*・ω・)シ
あとは、作成したroleを割り当ててインスタンスの起動
通常通りインスタンス起動のウィザードを辿っていくとInstance DetailsのところでIAM Roleの選択肢がでてくるので先ほど作成したroleを選択
起動を待っている間に、s3バケットのURLを一覧表示するようなサンプルプログラムの作成
通常版
#! /usr/bin/ruby require 'rubygems' require 'aws-sdk' my_access_key_id = 'xxxxxxxxxxxxxxxxxxxx' my_secret_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' AWS.config({ :access_key_id => my_access_key_id, :secret_access_key => my_secret_key }) sts = AWS::STS.new() session = sts.new_session() #puts "Session expires at: #{session.expires_at.to_s}" #s3 = AWS::S3.new(session.credentials) for bucket in s3.buckets puts bucket.url endてな具合で見慣れたCredentials周りのコードを書く訳ですがIAM roles for EC2 instances版だとここを省くことができます
#! /usr/bin/ruby require 'rubygems' require 'aws-sdk' s3 = AWS::S3.new() for bucket in s3.buckets puts bucket.url endと、こんな単純に。
実行結果はどちらも同じように
./list_s3_urls.rb http://bucket1.s3.amazonaws.com/ http://bucket2.s3.amazonaws.com/ http://bucket3.s3.amazonaws.com/みたいな感じで表示してくれます
aws-sdkを利用しない場合はcurlを使って
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role1 { "Code" : "Success", "LastUpdated" : "2012-07-25T04:43:21Z", "Type" : "AWS-HMAC", "AccessKeyId" : "xxxxxxxxxx", "SecretAccessKey" : "xxxxxxxxxx", "Token" : "xxx", "Expiration" : "2012-07-25T11:15:42Z" }みたいに最後の/の後にEC2インスタンスに割り当てられたroleの名前を入れてあげれば、一時的に利用できるAccessKeyIdとSecretAccessKeyを含むレスポンスが得られるのでこれを利用すれば良いみたいです。
0 件のコメント:
コメントを投稿