AWSインフラエンジニアならAWS CLIとjqはいれとく

インフラエンジニアでせっかくAWS使っているならマネジメントコンソールでぽちぽちするのではなくコマンドラインでタタタンとかっこよく操作したいもの。

最近はGithub ActionsのOIDCでAWS SSO連携させてIAMロールを割り当て、一時的なクレデンシャル使う(つまり長期的なクレデンシャルであるアクセスキーを使うAWS CLIじゃない)方法がベストプラクティスになってきていますが、それがすべての組織に合うわけでもないですし、何かを情報取得するときにCLIでぱぱっとやったほうが早い時も多いので覚えておいて損はないです。

AWS CLIはデフォルトでコマンドの結果をJSONで返してくるのですが、特定の値だけ出したいとか条件に合うものを出したかったりします。そんなときに使えるjqコマンドも紹介します。

AWS CLIインストール

AWS CLIは2.0系が最新です。割とインストール方法変わったりするので公式ドキュメントを見るのが確実です。そんなに難しく無いと思います。

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

インストールしたら`aws configure`と入力して最低限以下の設定だけすればOK。アクセスキーとシークレットはもちろんご自身のものを入力してください

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

これでいろいろCLI経由で実行できます。

自身の情報を取得したり

~ » aws sts get-caller-identity
{
    "UserId": "AKIAIOSFODNN7EXAMPLE",
    "Account": "333333333333",
    "Arn": "arn:aws:iam::333333333333:user/ruriwo-user"
}

ユーザ一覧を取得したりあらゆることができます。

$ aws iam list-users
{
    "Users": [
        {
            "Path": "/",
            "UserName": "ruriwo-user",
            "UserId": "AKIAIOSFODNN7EXAMPLE",
            "Arn": "arn:aws:iam::333333333333:user/ruriwo-user",
            "CreateDate": "2019-01-09T05:13:46+00:00"
        },
        {
            "Path": "/",
            "UserName": "ruriwo2-user",
            "UserId": "AKIFFFOSFODNN7EXAMPLE",
...

jqコマンドでフィルタ

たとえばIAMユーザの名前だけ一覧が欲しい、となったときどうしますか?
“UserName”: “ruriwo-user”, みたいになっている箇所を目で見て取り出すのはなかなかつらいですよね。grepコマンドで”UserName”が含まれる行を取るのもいいですが、整形が面倒ですね。

そこでjqコマンドを使えばこんなふうにできます。

$ aws iam list-users | jq '.Users[].UserName'
"ruriwo-user"
"ruriwo2-user"
"hoge-user"
"fuga-user"

他にも条件をつけることもできます。たとえば1年間ログインしてないユーザを出すとか。

 $ aws iam list-users | jq '.Users[] | select(.PasswordLastUsed < "2021-04-01")'
{
  "Path": "/",
  "UserName": "old-user",
  "UserId": "AKIAIOSFODNN7EXAMPLE",
  "Arn": "arn:aws:iam::333333333333:user/old-user",
  "CreateDate": "2019-01-09T05:13:46+00:00",
  "PasswordLastUsed": "2019-01-24T02:44:22+00:00"
}
{
  "Path": "/",
  "UserName": "hoge-user",
  "UserId": "AKIAIOSFODNN7EXAMPLE",
  "Arn": "arn:aws:iam::333333333333:user/hoge-user",
  "CreateDate": "2019-01-01T03:13:40+00:00",
  "PasswordLastUsed": "2020-01-11T06:03:15+00:00"
}
...

他にも色々できるので、詳しくはググってください。

jqインストール

Mac使いはhomebrewで。

 brew install jq

Windowsで、Chocolatey使っている場合はそれで。

chocolatey install jq

WindowsでChocolatey使っていない場合は公式からインストーラをダウンロードしてインストール。その後パス通せばOK.

https://stedolan.github.io/jq/download/

実はaws cliで–queryオプションでJMESPathを指定することでjqと同じようなフィルタはできる。そっちのほうが場合によっては便利だったりするが、個人的にはjqのほうが書きやすいのと世の中のドキュメントの多さ的にもjqのほうがとっつきやすいと思うのでここではjqを紹介しています。

コメントする

メールアドレスが公開されることはありません。