WindowsのPowerShell上で、Aws-Vaultと1Password CLIを利用してMFAの自動入力する仕組みを導入してみた

WindowsのPowerShell上で、Aws-Vaultと1Password CLIを利用してMFAの自動入力する仕組みを導入してみた

Clock Icon2025.07.22

はじめに

データ事業本部の太田です。

皆さんはAWSでの開発を行っているでしょうか?私は日常的に行っております。
そこで直面する課題として、AWS CLIやSDKを用いた際、実行時にセッションが切れるたびに毎回MFAの入力が求められることです。

セキュリティの観点上致し方ないことではありますが、毎回MFAコードを確認して入力する手間って、積み重なると結構な時間になるなと思い、なんとか自動化できないかなと日ごろから考えていました。

調べていくと、AWS-Vaultと1Password CLIを組み合わせることで、MFAコードの入力を自動化できることがわかりました。

ただ、ネット上を探してもWindowsのPowerShell上でAWS CLIやSDKを使用する際に、MFAの認証を自動で入力してくれるセットアップに関する記事を見つけることができませんでした。

(Macでのセットアップについては、やまたつさんやのんピさんの記事が参考になるかと思います。)

https://dev.classmethod.jp/articles/1password-shell-plugin-for-aws/

https://dev.classmethod.jp/articles/1password-shell-plugins-aws-cli-cdk/

また、調査していくと、同様の事象に遭遇したkariyaさんが、Windows上でAWS-Vaultが実行できない旨をOSSのIssue報告されている記事を見つけることができました。
https://dev.classmethod.jp/articles/issue-report-to-oss/

こちらのIssueについて、最近行われたv7.5.2のアップデートで、Windowsで実行できないバグが解消されたとのリリースノートを発見することができたので、これは試すしかないと思い、実際にWindows上でセットアップを行ってみました。

Pasted image 20250721141120

本記事は、その際に行ったセットアップの手順をまとめた内容となっております。

導入環境について

前提として、AWS CLI1Password for Windowsはインストール済みであることとします。
また、AWSアカウントのアクセスキーとシークレットアクセスキーも発行済みである必要があります。

今回セットアップを行った私が使用しているWindows環境は以下記載しておりますので、参考にしてください。

  • OS:Windows 11 Pro 23H2
  • ターミナル:PowerShell 7.5.2
  • AWS CLI :aws-cli/2.22.31 Python/3.12.6 Windows/11 exe/AMD64
  • 1Password for Windows :8.11.0

実施する内容

今回実装する内容は以下の通りです。

  1. 1Password CLIのセットアップ
  2. AWS-Vaultのセットアップ
  3. AWSのクレデンシャルとプロファイルの設定
  4. 実際にAWS CLIコマンドを実行してみた

実際にやってみた

では、早速セットアップをしていきましょう。

1. 1Password CLIのセットアップ

1Password CLIの設定方法は、以下の公式ドキュメントに詳しく記載されています。
こちらの内容に沿って、セットアップを行っていきます。

https://developer.1password.com/docs/cli/get-started/#step-2-turn-on-the-1password-desktop-app-integration

1Password CLIのインストール

まずは、1Password CLIのインストールを行っていきます。
今回はWindowsでのセットアップになるので、wingetを使用した方法で実行します。

PS C:\Users\ota.ryoichi> winget install 1password-cli
見つかりました 1Password CLI [AgileBits.1Password.CLI] バージョン 2.31.1
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://cache.agilebits.com/dist/1P/op2/pkg/v2.31.1/op_windows_amd64_v2.31.1.zip
  ██████████████████████████████  8.66 MB / 8.66 MB
インストーラーハッシュが正常に検証されました
アーカイブを展開しています...
アーカイブが正常に展開されました
パッケージのインストールを開始しています...
パス環境変数が変更されました; 新しい値を使用するにはシェルを再起動してください。
コマンド ライン エイリアスが追加されました: "op"
インストールが完了しました

以下のコマンドを実行してバージョンが表示されれば、インストールが完了しています。

PS C:\Users\ota.ryoichi> op --version
2.31.1

1Passwordアプリとの連携

続いて、1Passwordアプリとの連携を行い、コマンドライン上で1Passwordのサインインができる状態にします。

1Passwordアプリを起動させた状態でショートカットのctrl + ,で設定ウィンドウを表示させます。
表示されるタブの開発者をクリックし、1Password CLIと連携にチェックを入れることで設定は完了です。
Pasted image 20250721151638

1Passwordのアカウントのサインイン

最後に1Password CLIのコマンドを入力し、1Passwordのユーザのサインインを行います。
ここでは、Vaultの一覧を表示させるコマンドを入力し、アクセスリクエストの認証を行います。

PS C:\Users\ota.ryoichi> op vault list

私の場合はWindows Hello認証の設定を行っているため、顔認証での認証を行いましたが、設定していない場合はパスワード入力でも問題ありません。

Pasted image 20250721152251

認証が完了後、以下のようにVaultの一覧が表示されれば、OKです。
(表示された内容はマスキングしております。)

PS C:\Users\ota.ryoichi> op vault list
ID                            NAME
***********************      *********
***********************      [**]***-***
***********************      [**]***-****

2. AWS-Vaultのセットアップ

1Password CLIの導入が完了したため、続いてAWS-Vaultの設定を行っていきます。
AWS-VaultはGitHub上のページにて、インストール方法が記載されています。

ここで注意点ですが、どうやらAWS-Vaultにもいくつか種類があるようで、ByteNessが発行するものや99designsが発行するものが確認できました。両方試してみたのですが、少なくとも現時点のWindows PowerShellに関しては、ByteNess版のほうでのみ動作が確認できたため、インストールする際は注意が必要です。

ここからは、ByteNess版のAWS Vaultのセットアップを行っていきます。

AWS-Vaultアプリケーションのダウンロード

以下のページにある最新のリリースノートから、Windows用のアプリケーションファイルをダウンロードします。

https://github.com/ByteNess/aws-vault

バージョンがv7.5.2以上であることを確認のうえ、ご自身の環境に合うexeファイルをダウンロードしてきます。
Pasted image 20250721161829

ダウンロード完了後、ファイル名をわかりやすい名前に変更します。
私の場合はaws-vault.exeに変更しました。

Pasted image 20250721163807

AWS-Vaultの環境変数にパスを通すためのフォルダを作成

ダウンロードしてきたexeファイルを管理するためのフォルダを作成し、そのフォルダ配下にexeファイルを移動させます。

以下のコマンドを実行し、環境変数用のPATHを通すフォルダとしてToolsフォルダを作成します。
ご自身で管理されているPATH用のフォルダがあるようでしたら、本作業は割愛してかまいません。

PS C:\Users\ota.ryoichi> New-Item -ItemType Directory -Path "C:\Users\ota.ryoichi\Tools"

    ディレクトリ: C:\Users\ota.ryoichi\Tools

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2025/07/21     16:48                Tools

ダウンロード後に、リネームしたファイルを先ほど作成したToolsフォルダ配下に移動させます。ダウンロードファイルの格納先をデフォルトから変更している方は指定するPathを変更して実行してください。

PS C:\Users\ota.ryoichi> Move-Item -Path "C:\Users\ota.ryoichi\Downloads\aws-vault.exe" -Destination "C:\Users\ota.ryoichi\Tools\aws-vault.exe"

AWS-Vaultの環境変数のパスを通す

最後に環境変数Pathの設定を行います。
Windows検索で環境変数を編集と入力し、システム環境変数の編集を開きます。
Pasted image 20250721171012

ユーザー環境変数Pathを選択して、編集をクリックします。
(複数のユーザ間で共有する場合は、システム環境変数Pathで設定してください。)

Pasted image 20250721172727

新規から先ほど作成したC:\Users\ota.ryoichi\Toolsを追加し、OKをすべて押して閉じます。

Pasted image 20250721172140

PowerShellを再起動し、以下のコマンドを実行して環境変数のパス一覧を表示します。
表示された内容に先ほど設定したフォルダの内容が表示されれば、パスの設定は完了です。

PS C:\Users\ota.ryoichi> $env:PATH -split ';'
C:\Users\ota.ryoichi\Tools

PATHの設定が完了後、以下のコマンドを入力し、バージョンが表示されればOKです。

PS C:\Users\ota.ryoichi> aws-vault --version
v7.5.3

3. AWSのクレデンシャルとプロファイルの設定

最後にAWS-Vault上の設定とconfigファイルの記載の設定していきます。

ここではMFAを自動入力するための設定しか行いませんが、AWS-Vaultの使い方については、かとうさおりさんの以下の記事が参考になります。

https://dev.classmethod.jp/articles/aws-vault/

IAMユーザアクセスキーの登録

以下のコマンドを実行し、登録したいプロファイル名を指定して、IAMユーザ用に発行したアクセスキーとシークレットキーを入力します。今回はclassmethodというプロファイル名で作成しようと思います。

PS C:\Users\ota.ryoichi> aws-vault add classmethod
Enter Access Key ID: AKIAIOSFODNN7EXAMPLE
Enter Secret Access Key: ****************************************
Added credentials to profile "classmethod" in vault

無事登録が完了すると、以下のコマンド実行後にプロファイルの表示とクレデンシャル情報が設定されていることが確認できます。

PS C:\Users\ota.ryoichi> aws-vault ls
Profile                  Credentials              Sessions
=======                  ===========              ========
classmethod              classmethod              -

IAMロールの設定

次に、先ほどクレデンシャルの情報を設定したプロファイルを使用して、IAMユーザ及びAssumeロールの設定を行います。

aws configureコマンド実施後に作成される~.aws\configを、以下の内容に沿って編集します。

~.aws\config
[profile classmethod]
region=ap-northeast-1
output=json
mfa_serial=arn:aws:iam::{IAMユーザのアカウントID}:mfa/{IAMユーザ名}
mfa_process=op item get Amazon --otp
role_session_name={IAMユーザ名}

[profile classmethod-credential]
credential_process=aws-vault --prompt terminal export classmethod --duration 12h --format=json

[profile cm]
region=ap-northeast-1
source_profile=classmethod-credential
role_arn=arn:aws:iam::{Assumeロール先のアカウントID}:role/{IAMロール名}

ここで設定した内容について、いくつかポイントがあるので記載します。

~.aws\config
mfa_process=op item get {Vault名} --otp

[profile classmethod]句で設定しているmfa_processでは、1Password CLIのコマンドであるop item getを使用してます。getの指定には、1Password上で管理されているAWSアカウントのVaultの名称を入力してください。
私はAmazonと設定していたので、そちらを記載しております。

また、--otpオプションを選択することで、Vaultの中からワンタイムパスワードの値を取得することができます。

Pasted image 20250721195709

詳細は、以下の公式ドキュメントに記載しておりますので、ご参考ください。
https://developer.1password.com/docs/cli/reference/management-commands/item/#item-get

~.aws\config
[profile classmethod-credential]
credential_process=aws-vault --prompt terminal export {IAMユーザのプロファイル名} --duration 12h --format=json

[profile classmethod-credential]句では、先ほど設定したaws-vault addコマンドの内容をもとに、AWS-VaultのコマンドでクレデンシャルとMFAの情報を取得します。exportでは、コマンドで設定を行ったIAMユーザのプロファイル名を指定します。

~.aws\config
[profile cm]
region=ap-northeast-1
source_profile={クレデンシャル情報が設定されたプロファイル名}
role_arn=arn:aws:iam::{Assumeロール先のアカウントID}:role/{IAMロール名}

最後に[profile cm]句では、Assumeロール先のIAMロールの設定を行っています。source_profileに先ほどのクレデンシャルの情報を取得したプロファイル名を指定することで、Assumeロール先にも同じ情報が引き継ぐことが可能です。

このようにすることで、今後Assumeロール先が増えた場合でも、[profile cm]句をコピーし、profile名称とrole_arnの内容を追加したいAssumeロールの情報に変更するだけで、手軽に追加することができます。

ここまでで、必要なセットアップは完了です。
お疲れ様でした!

4. 実際にAWS CLIコマンドを実行してみた

セットアップが完了したので、早速CLIコマンドを叩いて、MFAコードの入力が自動で行われるかの確認してみましょう。

先ほど設定を行ったプロファイルを使用して、S3のバケットのリストを取得してみたいと思います。

PS C:\Users\ota.ryoichi > aws s3 ls --profile cm

実行後、1Passwordのアクセスリクエストが表示されます。
1Password CLIの認証と同様に、表示された内容に従って認証を行います。

Pasted image 20250721180230

認証の完了後、コマンドライン上で求められるMFAの入力のメッセージは表示されずに、裏側でMFAの入力処理が行われるようになります。
少し経つと、CLIコマンドの実行結果が表示されるようになります。

PS C:\Users\***> aws s3 ls --profile cm
2024-11-12 12:37:44 ************-ap-northeast-1-athena-results-bucket-**********
2024-11-12 13:07:07 ****-********-output
2025-05-28 10:28:10 ****-***-cdk-deploy-bucket

無事、MFAを入力することなく、Powersehll上でAWS CLIのコマンドの実行ができました。

最後に

いかがだったでしょうか?

WindowsのPowerShellにおいても、AWS-Vaultと1Password CLIを組み合わせることで、快適かつセキュアにAWS開発ができる環境が実現しました。

私の所感にはなりますが、こちらの設定を行ったおかげで、MFAの入力を求められるタイムロスや作業中のノイズを軽減することができ、導入する前に比べて快適に開発を行うことができております。

本記事が、AWSの開発を行うWindowsユーザの方の参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.