プログラマでありたい

おっさんになっても、プログラマでありつづけたい

IAMロールを付与したEC2インスタンスでアクセスキーを利用する

 IAMロールを付与したEC2インスタンスでは、そのロールの権限を利用できます。この機能のお陰で、アクセスキーの必要性はなくなり、より安全に運用することができます。今日のお題は、それでもアクセスキーが必要な場合はどうしたらよいかという点と注意点です。

アクセスキーが必要になるケース

 BOOTHで絶賛販売中のAWSの薄い本 IAMのマニアックな話(※ステマ)を読んたさわらさんから、次のような疑問を頂きました。

【読書RTA】 #技術書典 7で購入した31冊レビュー 【自己最速】

アプリケーション開発で、AWS-SDKを利用する機能を開発するならローカルにIAMのクレデンシャルがないと厳しいような。セキュリティ的には心配なので、環境のVDI化(Workspace)などと組み合わせた対策が要りますかね?

 ここでいうローカルというのは、自分のローカルPCを指していると思いますが、今回はIAMロールを付与したEC2インスタンスで作業するという前提にさせて頂きます。
 AWS-SDKの場合、IAMロールを付与したインスタンス上で作業する場合、IAMのクレデンシャルを設定する必要がありません。SDKの機能で、定められた優先順位に従い、勝手に付与されている権限を取得して利用します。このあたりは、『AWSのアクセスキー・シークレットアクセスキーをプログラムに安全に埋め込む(埋め込まない)方法』で解説しているので、知らない方はぜひ読んでみてください。

blog.takuros.net

 問題は、ツール等の成約でどうしてもアクセスキー・シークレットアクセスキーが必要な場合です。

IAMロールを付与したEC2インスタンスで、アクセスキーを取得する方法

 実は IAMロールを付与したEC2インスタンスでは、メタデータから一時的なアクセスキーを取得する方法があります。
curlコマンドで、ロール名を指定して取得するだけです。

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ロール名
{
"Code" : "Success",
"LastUpdated" : "2019-10-03T22:09:42Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIAQZZZZZZZZZZZZZZZ",
"SecretAccessKey" : "PxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"Token" : "クソ長いToken",
"Expiration" : "2019-10-04T04:44:40Z"
}

 この方法でIAMロールの権限を利用できる一時的な認証情報を取得できます。
詳しくは公式ドキュメントの『Amazon EC2 の IAM ロール』の"インスタンスメタデータからセキュリティ認証情報を取得する"のセクションを読んでください。
Amazon EC2 の IAM ロール - Amazon Elastic Compute Cloud

 またこの一時的な認証情報の利用方法については、ClassMethodさんの下記のブログが参考になります。
dev.classmethod.jp

メタデータから取得できる一時的認証情報の問題点

 上記のように簡単に一時的な認証情報を取得できます。あまりに簡単に取得できるので、それはそれで問題じゃないかという話もあります。例えば何らかの脆弱性を利用して、EC2に侵入された場合、ロールに実行場所の制限をしていない場合、クレデンシャル情報を利用して、そのEC2インスタンス以外の場所からでもAWSの操作ができます。実際、Capital Oneの個人情報流出事件は、この方法で取得したクレデンシャルで情報を盗み出した模様です。
 Administrator権限のような強い権限をロールに付与していたら目もあてられませんね。インスタンスにロールを付与する場合、必ず最小権限に絞りましょう。

piyolog.hatenadiary.jp

 個人的には、そのうちメタデータから一時的認証情報の取得の仕方を変えるんじゃないかなぁと思います。GCPの場合だったら、ヘッダー情報にMetadata-Flavor: Googleがないとメタデータを取得できないようになっています。
※この方法だけでは、万全ではないだろうが
インスタンス メタデータの保存と取得  |  Compute Engine ドキュメント  |  Google Cloud

IAMのマニアックな話に追記します

 この辺りの話は、「IAMのマニアックな話」で文章に散りばめてはおりました。しかし、独立した項目として扱っておりません。ということで、電子版の方に追記することにしました。この辺り同人誌だと簡単に変更できて良いですね。技術書典7で紙版で買った頂いた方にも、ダウンロードカードを配布しています。そちらからダウンロードできるファイルについても追記版を取得できるようにしておきます。対応したら、改めて連絡します。
 「IAMのマニアックな話」は、このようなIAMを使う上でのベーシックな考え方からセキュリティ・運用の具体例、テンプレートまでカバーしております。BOOTHで絶賛販売中なので、興味がある方はぜひご検討ください。
※ステマ

takuros.booth.pm

See Also:
#技術書典 に初出展。AWSの薄い本 IAMのマニアックな話を書きました
#技術書典 に出展する『AWSの薄い本 IAMのマニアックな話』はこんな本