share facebook facebook twitter menu hatena pocket slack

2012.08.09 THU

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

鈴木 宏康

WRITTEN BY 鈴木 宏康

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
 "/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等のアクセスキー、シークレットキーを指定するツールも
対応されると嬉しいです。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。