IAM roles for EC2 instancesを使ってみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

IAM roles for EC2 instancesって何?

IAM roles for EC2 instancesは、EC2インスタンス自身が何かAWSの各種サービスにアクセスする際の権限を設定できる仕組みです。通常、IAMは、グループとユーザに関連づけていましたが、IAM Roleは、EC2インスタンスに割り当てます。今までこの仕組みがなくて、EC2内部からAWSの各種サービスにアクセスする際に、AccessIdとSecretKeyをコピーして渡していました。間違ってAMIの共有などをしてしまうと漏洩に繋がってしまい気を使っていました。今回の新機能によって、秘密情報をコピーすることなく安全に使うことが出来ます。

IAM Roleを作成する

まずはじめに、IAMの管理コンソールを開いてRoleの新規作成をします。作成時にポリシーを設定しましょう。

EC2インスタンスにIAM Roleを割り当てる

設定は簡単です。いつものようにEC2インスタンス起動ウィザードで指定するだけです。

メタデータを取得してみる

それでは、IAM Role設定付きのEC2インスタンスにSSH接続してメタデータを取得してみましょう。

$ curl http://169.254.169.254/latest/meta-data/     
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id

iamという項目が追加されていますね。この下にsecurity-credentialsがあり、その下にロール名が入ります。

$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/test/                                                        
{
  "Code" : "Success",
  "LastUpdated" : "2012-06-13T13:39:32Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "SecretAccessKey" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "Token" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "Expiration" : "2012-06-13T19:50:24Z"

ちゃんと取得できましたね!ちなみに、AWS純正のSDK最新版には、ソース内で接続キー情報を指定しない場合にIAM Roleの情報を利用するようにアップデートされています。ですから、毎回のようにソースに埋め込んだり、外部ファイルを読み込まなくてもサクッと繋がってしまうわけです。こざっぱりして良いですね。

まとめ

IAM Roles for EC2 Instanceはいかがでしたでしょうか。仮想サーバに対して外部から設定を注入する仕組み、これはもう、DI(Dependency Injection)コンテナですよ。あー、オレ今いいこと言ったwww。また明日〜!!

参考資料

Using Instance Metadata