EC2インスタンスメタデータからワンライナーでクレデンシャルを取得してみた
こんにちは、臼田です。
みなさん、EC2のクレデンシャル取得してますか?(挨拶
今回はタイトル通りEC2のインスタンスメタデータからワンライナーでクレデンシャルを取得する方法を考えたので紹介します。
ワンライナー
こちらです。インスタンスメタデータはv1前提です。
[ec2-user@ip-172-31-14-109 ~]$ mu=http://169.254.169.254/latest/meta-data/iam/security-credentials/;curl -s $mu | echo $mu$(cat) | xargs -n1 curl { "Code" : "Success", "LastUpdated" : "2022-10-07T16:45:41Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIAxxxxxxxxxxxxxxxx", "SecretAccessKey" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Token" : "xxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==", "Expiration" : "2022-10-07T23:21:32Z" }
背景とか解説とか
EC2のクレデンシャルを取得するのはメタデータにアクセスするだけなので、どのようにやってもよくいくらでもやり方がありますし、ワンライナーにするほど手間ではありません。
通常は1度目にのhttp://169.254.169.254/latest/meta-data/iam/security-credentials/
パスにリクエストして、2度目にレスポンスにあるIAM Role名を入れたhttp://169.254.169.254/latest/meta-data/iam/security-credentials/{IAM Role名}
のパスにリクエストするだけです。
ただ毎回2ステップだと面倒なのでまとめました。
今回のポイントですが、jq
を利用していないところです。jq
を利用すると受け取ったjsonをいい感じに整形したりが簡単にできるため、よくこれを利用したものを見かけるのですが、EC2でAmazon Linux 2を立ち上げたとき、デフォルトで入っていないなどの欠点があります。
パッと立ち上げてサクッとクレデンシャルを取得したいので、jq
に頼らない方針で作りました。
シェル芸詳しくないので、もっと効率的なやり方あるぜ、とかもっと汎用的なやつがあるぜ、という方がいたらぜひブログとかに書いてください。
ちなみに、実はこのワンライナーは今回作ったのではなく下記記事で利用していました。個別のブログ化をしようと思っていたのですが、気がついたら1年近く経っていました。
まとめ
EC2のクレデンシャルを取得するワンライナーを紹介しました。
地味な効率化好きなので、また思いついたら書き残しておきます。