aws-sdkを使用してEC2のインスタンスプロファイル情報を取得したい!
認証情報を取得する方法はいくつかあります。
ただ、EC2にデプロイしたアプリからAWSの認証情報を取得する方法でベストなのは、IAMロールの権限を取得することです。
ということで今回は、aws-sdkでEC2インスタンスプロファイル情報を取得する方法を解説します!
環境
言語:PHP
サービス:AWS EC2
前提
・EC2にIAMロールが付与されていること
・ライブラリ「aws-sdk」がインストールされていること
認証情報を取得する方法
AWSの認証情報を取得する方法はいくつかあります。
例えば、IAMユーザのアクセスキーなどを利用する場合や、今回のようにIAMロール権限を利用する方法です。
・IAMユーザのアクセスキー・シークレットキーを利用する
・EC2のIAMロール権限を利用する
ただ、セキュリティを考慮すると、IAMロール権限を利用するのがベストです。これに関しては後述します。
なぜIAMロールを利用するのか?
例えば、IAMユーザのアクセスキーなどを利用する場合、キー情報をコード上で保持しなくてはなりません。
仮にIAMユーザが最強の権限を持っていたとして、このキーが漏洩した場合、このキー情報を取得した人は何でもできてしまいます。
要は、セキュリティ的に非常に危険だということです。
ただし、IAMロールは、言ってしまえばただの権限の集まりにすぎず、また、コード上にキー情報などを持つ必要もありません。
IAMロールを利用するのは、セキュリティ的な観点から安全だということになります。
PHPでIAMロール権限を取得する方法
IAMロール権限を取得するには、「EC2に付与されたIAMロール権限を取得する」必要があります。
EC2ではこの情報をインスタンスプロファイルというファイルに保持しています。
つまり、PHPからインスタンスプロファイル情報を取得し、認証情報を取得することができれば、その認証情報を用いてAWSのサービスをPHPから利用することができるわけです。
PHPでインスタンスプロファイル情報を取得する方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php namespace App\Facades; use Config; use Aws\Credentials\CredentialProvider; /** * AwsCredentials * * @SuppressWarnings(PHPMD.StaticAccess) * * @author K.Izumi */ class AwsCredentials { /** * AWS認証情報を取得する * * NOTE:EC2のインスタンスプロファイルからIAMロールの権限を取得する * IAMロールにはCognito処理にて使用するポリシーがアタッチされていること * * @return any AWS認証情報 */ public function get() { $profile = CredentialProvider::instanceProfile(); $promise = $profile(); $credential = $promise->wait(); return $credential; } } |
これで、EC2のインスタンスプロファイル情報を取得することができます。簡単ですね。
まとめ
こんな簡単なコードで取得できるのか半信半疑でしたが、意外といけちゃいました。
aws-sdkは奥が深いですが、うまくいった時は感謝感激。
ではまた!