はじめに

この記事は「クラウドインテグレーション事業部 SRE 第三セクションブログリレー」の6回目(全6回)の記事です。
前回は茅根さんの「Amazon Linux 2023でEC2 インスタンスステータスチェックを意図的に失敗させる」が公開されました。

さて、本題です。
AWS CLI v2をWindows環境で使用する際、インターネットオプションのプロキシ設定が原因でインスタンスメタデータの取得に失敗することがあります。この記事では、その問題の詳細と解決策について解説します。

問題の概要

Windows サーバー上で AWS CLI v2 を実行した際、以下のようなエラーが発生することがあります:

Error when retrieving credentials from Ec2InstanceMetadata: No credentials found in credential_source referenced in profile <プロファイル名>

このエラーは、AWS CLIがインスタンスメタデータからインスタンスプロフィール(IAMロール)の認証情報を取得できない状態を示しています。

原因

この問題の主な原因は、AWS CLIがインスタンスメタデータの取得先(169.254.169.254)に対して、OSのインターネットオプションで設定されたプロキシ経由で接続しようとすることにあります。

169.254.169.254はリンクローカルアドレスであり、同一サブネット内からしかアクセスできません。プロキシサーバーを経由すると、EC2インスタンスが配置されているサブネットの169.254.169.254には到達できず、結果としてインスタンスメタデータの取得に失敗します。

技術的背景

  1. AWSは、EC2インスタンスのメタデータ取得先として169.254.169.254を使用しています。
  2. AWS CLIはHTTP/HTTPS接続にurllib3ライブラリを使用しており、Windowsではシステムレベルのプロキシ設定を参照します。
  3. Windowsには「インターネットオプション」と「WinHTTP」の2種類のプロキシ設定があり、urllib3は前者を参照します。

解決策

この問題を解決するには、プロキシ設定から169.254.169.254を除外する必要があります。
1. インターネットオプションを開きます。
2. 「接続」タブを選択し、「LANの設定」をクリックします。
3. プロキシサーバーの詳細設定で、例外に「169.254.169.254」を追加します。

動作確認

プロキシ経由で失敗するケース


aws --debug --profile <プロファイル名> configure list

このコマンドを実行すると、プロキシサーバー(例:192.168.2.29:8081)を経由してアクセスしようとし、404エラーが発生します。

プロキシを回避して成功するケース

169.254.169.254をプロキシ例外に設定後、同じコマンドを実行すると、直接EC2インスタンスのメタデータサービスにアクセスし、正常に認証情報を取得できます。

まとめ

Windows環境でAWS CLI v2を使用する際は、プロキシ設定に注意が必要です。169.254.169.254をプロキシ例外に追加することで、インスタンスメタデータの取得問題を解決できます。この設定により、AWS CLIは正しくEC2インスタンスの認証情報を取得し、スムーズに動作するようになります。

クラウドインテグレーション事業部 SRE 第三セクションブログリレーを終えて

本記事で、「クラウドインテグレーション事業部 SRE 第三セクションブログリレー」全6記事の最終回となります。
このブログリレーでは、以下のような多様なトピックについて深く掘り下げてきました:

  1. The Linux Foundation の日本語オンライン講座を試してみた
  2. 初めてTerraform importしてみた
  3. CDKでEKSクラスター構築してみた
  4. Session Managerを使用してAnsible実行してみた
  5. Amazon Linux 2023でEC2 インスタンスステータスチェックを意図的に失敗させる
  6. Windows上のAWS CLI v2でインスタンスメタデータ取得に失敗する問題とその解決策(本記事)

これらの記事を通じて、システムの運用、セキュリティ、自動化など、幅広い分野にわたる知識と実践的なテクニックを共有してきました。各記事は、実際の業務で直面する可能性のある課題や、新しい技術の導入に関する実践的なガイダンスを提供しています。

これらの記事が、読者の皆様のクラウド技術スキルの向上や、より効率的で革新的なインフラストラクチャの構築に役立つことを願っています。クラウド技術の世界は急速に進化しており、常に新しい学びの機会があります。このシリーズが、皆様の継続的な学習と成長の一助となれば幸いです。

最後まで読んでくださった読者の皆様に心から感謝申し上げます。今後もクラウド技術に関する有益な情報を発信していきますので、引き続きご期待ください。