0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JSONデータのアクセスキー情報を認証ファイル形式に変換するコマンド

Last updated at Posted at 2022-02-11

先日、JAWS-UG CLI専門支部に参加しました。
参加したのは「IAMユーザー基礎(ユーザー)」の会で、AWS CLIでIAMユーザーの作成を行うという内容です。

CLI専門支部では、講師の波多野さんが作成した手順書をもとに、ゴリゴリハンズオンを進めています。

その手順書の中で「???」となったコマンドがあったので、個人的なメモとして残しておきます。

先に記載しておくと、以下のコマンドはJSON表記になっているAWSアクセスキーデータを、認証ファイルの形式に変換するためのコマンドです。

echo "[${IAM_USER_NAME}]" > ${FILE_USER_CREDENTIAL}

cat "${FILE_ACCESS_KEY}" \
  | jp.py 'AccessKey' \
  | sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' \
  | sed 's/AccessKeyId/aws_access_key_id/' \
  | sed 's/SecretAccessKey/aws_secret_access_key/' \
  | grep '^aws_' \
  >> ${FILE_USER_CREDENTIAL} \
    && cat ${FILE_USER_CREDENTIAL}

この記事に書いてあること

  • jp.pyとは何か
  • sedコマンドの使用例
  • grepコマンドの使用例

(すべてメモ書き程度の内容ですのでご了承ください)

jp.pyってなんぞ???

まずは2行目

jp.py 'AccessKey'

調べてみると、どうやらjp.pyというのはJSON用のクエリ言語らしい
なので上記コマンドを入力すると、'AccessKey'オブジェクトに対してクエリを実行することができる

ちなみに、jp.pyはAWS CLIをインストールすると自動でくっついてくるらしい
AWSとJSONは切っても切れない存在ですし、これは覚えておくとかなり使えそうです

sedコマンドの嵐

次はsedが連続している3行目

  | sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' \

sed '/[{}]/d'

sedコマンドは/で置き換える文字を区切っています
また、dをつけると行の削除を行います
加えて、[]は「囲まれているもののいずれか」という意味です

なので、最初のsedはこういう意味

  • 対象の文字は{}のいずれか
  • 対象の文字が含まれる行を丸ごと削除

sed 's/[" ,]//g'

sは置換を意味する
デフォルトだと各行で一番最初にヒットした対象文字しか置換しないので、gをつけることで各行の対象文字をすべて置換することができる
なので、2つ目のsedはこういう意味

  • 対象の文字は" (半角スペース)、,のいずれか
  • "は特殊文字なので\でエスケープ処理
  • 置換後の文字を指定していないため、結果的には対象文字を削除する

sed 's/:/=/'

これもsがついているので、:=に置換するだけ
同様に、4-5行目も単純な置換を行っている

  | sed 's/AccessKeyId/aws_access_key_id/' \
  | sed 's/SecretAccessKey/aws_secret_access_key/' \

grepと正規表現

最後に正規表現を含んだgrepコマンド

  | grep '^aws_' \

まず、grepは ''で囲んだ文字列に一致する行を抽出するコマンド
そしてgrepは正規表現を使用でき、今回は^を使用している
^は行の先頭であることを指定しているので、以下のような意味になる

  • 行の先頭にaws_がある行だけを抽出

まとめ

最後に上記のコマンドを実行した結果どうなるのか、例を示しておきます

before

元となる、JSON表記のアクセスキー情報

${FILE_ACCESS_KEY}
{
  "AccessKey": {
    "UserName": "handson-cli-basic-user",
    "Status": "Active",
    "CreateDate": "2021-07-27T01:23:45.678Z",
    "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "AccessKeyId": "xxxxxxxxxxxxxxxxxxxx"
  }
}

after

以下のような新しい認証ファイルが作成される

${FILE_USER_CREDENTIAL}
[handson-cli-basic-user]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

おわりに

勢いで調べたことをまとめているので、「ここ違うよ!」とか突っ込んでいただけると大変うれしいです

また、JAWS-UG CLI専門支部はAWSの勉強になるだけでなく、シェルスクリプトやLinuxコマンドの勉強になるのでとても楽しいです。
まだ参加して日が浅いですが、まずは一年間通してじっくり勉強させていただこうと思います!

補足

Twitterにて、講師の波多野さんから直々にご指摘をいただいております。

波多野さんありがとうございます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?