2012年6月24日日曜日

"IAM roles for EC2 instances"で"AWS PHP SDK"を試してみる


スズキです。

下記の発表より、EC2上からAPIを実行する上で、アクセスキー、シークレットキーなど
を設定するのですが、それが、より、シンプルに、安全に実現できるようになりました。
【AWS発表】IAM roles for EC2 instances – シンプルに安全にEC2からAWSサービスのAPIにアクセス可能に
今までは、IAMからアクセスキー、シークレットキーを取得し、EC2上に
設定ファイルなどの形で配置して利用する方法が多かったと思います。
(より安全にするためS3に配置して利用する方法もあると思いますが)

それが上記の機能により、AWSがEC2のメタデータにキーを設定してくれるように
なりました。具体的には下記のように取得することができます。
# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2
{
  "Code"            : "Success",
  "LastUpdated"     : "2012-06-24T09:01:00Z",
  "Type"            : "AWS-HMAC",
  "AccessKeyId"     : "XXXXXXXX",
  "SecretAccessKey" : "YYYYYYYY",
  "Token"           : "ZZZZZZZZ",
  "Expiration"      : "2012-06-24T15:14:42Z"
}

この機能を利用することは、下記のような利点があると思います。
  • キーをEC2に配置しなくてよくなる → 安全性向上(今までも工夫すればできたが)
  • キーは1日に複数回自動でローテーション → 安全性向上(自分でやると大変)
  • EC2内でキーに依存した操作が不要(ロールの付け直しで対応) → より汎用的に 

ということで実際に試してみます。

まずはIAMのロール作成です。


ロールの名前をつけて、


ポリシーを選んで(ここではEC2のフルアクセス)、


ポリシーのJSONも確認して、


さらに最終的な確認もして、


ロールを作成します。


そして、EC2立ち上げ時に、ロールの設定(左下)が出来るようになっているので、
上記で作成したロールを選択します。


その後、起動したEC2で下記を実行すると、アクセスキー、シークレットキーを
取得することができます。(少し時間がかかりましたが...)

# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2
{
  "Code"            : "Success",
  "LastUpdated"     : "2012-06-24T09:01:00Z",
  "Type"            : "AWS-HMAC",
  "AccessKeyId"     : "XXXXXXXX",
  "SecretAccessKey" : "YYYYYYYY",
  "Token"           : "ZZZZZZZZ",
  "Expiration"      : "2012-06-24T15:14:42Z"
}

さらに"AWS PHP SDK"で利用してみます。
と言っても簡単に利用でき、下記のコードで実現できます。
# cat test 
<?php
require_once("/opt/aws/lib/php/default/sdk.class.php");
date_default_timezone_set("Asia/Tokyo");
$ec2 = new AmazonEC2(array("default_cache_config" => "/tmp"));
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
$response = $ec2->describe_instances();
var_dump($response->isOK());
?>
# ./test 
bool(true)
注意点として「"default_cache_config" => "/tmp"」を指定しないと エラーが発生して、処理が止まってしまいました。

ちなみに、上記で指定した"/tmp"以下を確認してみると、
# ls /tmp/
instance_profile_credentials.cache
のようなバイナリファイルが作成されていました。

s3cmdなどのアクセスキー、シークレットキーを指定するツールも早く対応してほしいなー...
(もう、してるかも!?)
--------
http://www.suz-lab.com

0 コメント: