AWS CLIでプロキシサーバを使う場合の注意
はじめに
こんにちは。
くコ:彡がトレードマークの阿部です。
プロキシサーバがある環境でAWS CLIを使った所、嵌ったので共有します。
プロキシサーバの指定
AWS CLIではプロキシサーバを利用する事が可能です。
環境変数 HTTP_PROXY
とHTTPS_PROXY
にプロキシサーバのIPアドレスとポート番号を指定します。
$ export HTTP_PROXY=http://xxx.xxx.xxx.xxx:xxxxx $ export HTTPS_PROXY=http://xxx.xxx.xxx.xxx:xxxx
ここで嵌った
プロキシサーバとIAMロールを利用する場合、注意が必要です。
環境変数を設定しIAMロールを利用している環境で、aws ec2 describe-instances
コマンドを実行してみます。
EC2インスタンスの一覧が表示される事を期待しますが、クレデンシャルが読み込めない旨のエラーメッセージが表示されます。
$ aws ec2 describe-instances Unable to locate credentials. You can configure credentials by running "aws configure".
プロキシの除外設定を追加し、aws ec2 describe-instances
コマンドを実行すると、インスタンス一覧が表示されます。
$ export NO_PROXY=169.254.169.254 $ aws ec2 describe-instances ( 略 )
なぜ、除外設定が必要?
除外した169.254.169.254
はインスタンスメタデータへのアクセスに利用されます。
インスタンスメタデータには、そのインスタンス自体内からのみアクセス出来ます。
利用出来るデータは、こちらにまとめられています。
試しにAMI IDを表示してみましょう。
curlコマンドでami-idを指定すると、そのインスタンスのAMI IDが表示されます。
$ curl http://169.254.169.254/latest/meta-data/ami-id ami-0a1b3c4d
IAMロールを利用する場合、AWS CLIはインスタンスメタデータiam/security-credentials/role-name
を利用します。
メタデータには以下のような、一時的なセキュリティ認証情報が格納されます。
{ "Code" : "Success", "LastUpdated" : "20XX-XX-XXTxx:xx:xxZ", "Type" : "AWS-HMAC", "AccessKeyId" : "AKIAEGRGCCMEXAMPLE", "SecretAccessKey" : "afeiu8Gb2Ynse/L9WNIWEG/mvIPoiCMEXAMPLEKEY", "Token" : "token", "Expiration" : "20YY-YY-YYTyy:yy:yyZ" }
プロキシサーバを経由するとメタデータに格納された認証情報にアクセスできないため、クレデンシャルエラーが出たという事がわかりました。
同じ事象が起きた場合は、NO_PROXY
を設定してみて下さい。
参考
以下を参考にしました。
AWS Command Line Interface User Guide
Amazon Elastic Compute Cloud Linux インスタンス用ユーザーガイド
おわりに
AWS CLIとプロキシサーバを利用する場合の注意点について、まとめました。
クレデンシャルエラーが出た場合、この記事を思い出して頂けると嬉しいです。