WindowsでAWS IAMユーザーのアクセスキーをスクリプト一発でローテーションする

こんにちは。サービスグループの武田です。

以前、Mac環境でIAMユーザーのキーローテーションするスクリプトを公開しました。社内でも使用者が出てきておりうれしい限りです。

AWS IAMユーザーのアクセスキーをスクリプト一発でローテーションする

さてクラスメソッドではマイノリティとささやかれているWindowsユーザーですが、「せっかくだからWindows版も作ってよ」といわれたので、せっかくなので作ってみました。

先にお断り

Mac版のときと基本的には同じです。

今回書いたスクリプトですが、自分のローカルPCのクレデンシャルしか更新しません。そのため複数の環境でアクセスキーを共有している場合、それらのプログラムが動かなくなります。そのようなケースでは使用しないでください。

AWS CLIとAWS Tools for PowerShell、両方がインストールされている場合、両方のクレデンシャルファイルを更新します。プロファイル名はひとつしか指定できないため、同じアクセスキーを異なるプロファイル名で運用している場合、意図していない動作になることがあります。

スクリプトがエラーなどで途中で停止した場合、古いアクセスキーなどが残ったりします。そのようなケースでは手動でクリーンアップ処理を行ってください。またクレデンシャルファイル(credentials/RegisteredAccounts.json)はスクリプト内でコピーしています。必要であれば利用または削除などを行ってください。

環境

次のような環境で動作確認をしています。

  • Windows Server 2016
  • PowerShell
    • 5.1.14393.3053
    • 6.2.3

スクリプトの紹介

スクリプトはgistに上げてあります。好きに使ってください。

基本的な使い方としては次にように、第1引数にローテーションしたいプロファイルを指定するだけです(スクリプトのダウンロードは手動でももちろんOKです)。省略した場合はdefaultプロファイルを対象とします。Mac版ではクレデンシャルファイルのパスを指定できるようにしていましたが、Windows版では省略しています。

(iwr https://gist.githubusercontent.com/TAKEDA-Takashi/d60141a79f18717ca734c4d7e3a6317e/raw/aws-iam-user-key-rotation.ps1).Content | Out-File -FilePath .\aws-iam-user-key-rotation.ps1 -Encoding utf8
.\aws-iam-user-key-rotation.ps1 classmethod

スクリプト内の処理は大まかに次の順番で行っています。Mac版との大きな違いとして、AWS CLIとAWS Tools for PowerShellをどちらも使用していた場合、クレデンシャルファイルが複数存在することになります。そのためどちらもインストールしていた場合は両方のクレデンシャルファイルを更新します。詳細は中身を見てください。

  1. AWS CLIのインストールチェック
  2. AWS Tools for PowerShell、Core、AWS.Tools.*の順にインストールチェック(見つかった時点で打ち切り)
  3. 使用中のアクセスキーIDを取得
  4. クレデンシャルファイルコピー(バックアップ)
  5. 新規アクセスキーを作成
  6. クレデンシャルファイルに新しいアクセスキーを設定
  7. 新しいアクセスキーでAPIアクセス
  8. 古いアクセスキーを削除

最後に

管理するアクセスキーは少ないほど好ましいです。更新するアクセスキーが多いなという方はIAMロールに変更できないかなど検討してみてください。また前述したようにキーローテーションは定期的に実行することが推奨されています。今回紹介したスクリプトをたとえば60日ごとに自動実行されるように設定することで、意識しなくてもセキュリティを向上できます。ぜひこのあたりのことも検討してみてください。

ほとんどPowerShell書かないんですけど、たまに書くと楽しいです。ConvertFrom-Jsonコマンドレットは神。