この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
今日見かけたこちらのエントリを読んですごく便利そうだったので、MacのTouch ID認証による1Password CLIでのAWSのワンタイムパスワード(OTP)取得を自分自身でも試してみました。
前提
Touch IDが利用可能なMacBookを使用します。
$ sw_vers
ProductName: macOS
ProductVersion: 11.6
BuildVersion: 20G165
AWSのMFAデバイスのOTPはすでに設定済みです。
1Passwordには、AWSダッシュボードへのサインインでMFAコード含む情報が自動入力できるアイテムを登録済みです。
セットアップ
1Password CLIのインストール
brew install --cask 1password/tap/1password-cli
1Password 8 for Mac betaの導入
私のMacBook上の現在の1PasswordアプリはVersion 7.9.2
だったので、8 betaを導入します。
8 betaは下記からダウンロード出来ます。
ダウンロードしたインストーラーを実行すると、version 8.6
の1Passwordアプリを導入できました。
すでに7以前のアプリがある場合は共存するようです。不要な場合は古いアプリをアンインストールをしてください。
Biometric unlock for 1Password CLIの有効化
1Passwordアプリで[Preference]-[Developer]-[1Password CLI 2]でBiometric Unlock for 1Password CLI
にチェックを入れます。
1Password CLIへのサインイン
op vault ls
実行するとサインインアドレス(hgoe.1password.com
みたいなやつ)、メールアドレス、シークレットキーを求められるので、正しく指定できたらサインインできます。
以降、このサインインを実施済みの環境では、1Password CLIのコマンド実行時にはTouch IDを求められます。一度Touch IDの認証を行えばセッションが切れるまでの期間は認証なしでコマンドを実行可能です。
AWSアカウントのOTPを取得してみる
まずop item list
を実行して1Passwordに格納しているアイテムの一覧を出力します。
$ op item list
ID TITLE VAULT EDITED
xxxxxxxxxxxxxxxxxxxxxxxxxx hogeアプリ(DEV) 管理者 Private 1 day ago
...
その中でOTPを取得したいアカウントのID
を控えます。
op item get <ID>
を実行すると、そのアイテムの詳細を取得できます。
$ op item get xxxxxxxxxxxxxxxxxxxxxxxxxx
ID: xxxxxxxxxxxxxxxxxxxxxxxxxx
Title: AWSアカウント(IAMユーザー)
Vault: Private (xxxxxxxxxxxxxxxxxxxxxxxxxx)
Created: 2 years ago
Updated: 1 day ago by 若槻龍太
Favorite: false
Tags: 社内
Version: 14
Category: LOGIN
Fields:
password: xxxxxxxxxxxxxxxxxx
username: hoge-wakatsuki
: 123456
アカウントID: XXXXXXXXXXXX
URLs:
- aws.amazon.com (primary)
op item get <ID> -otp
を実行すると、OTPだけを取得することができました!
$ op item get xxxxxxxxxxxxxxxxxxxxxxxxxx --otp
123456
注意点
1Passwordアプリ自体のアップデート機能だと7.Xまでしかアップデートできない
少しハマったのですが、1Passwordアプリ自体のアップデート機能だと7.Xまでしかアップデートできないようです。
1Passwordアプリ(version 7)の[設定]-[アップデート]で、[ベータビルドを含む]にチェックを入れ[今確認]をクリック。
確かに7.9
のbetaまでしかアップデートできないようですね。
よって前述の通り1PasswordのWebサイトから8 betaのインストーラーを直接ダウンロードする必要がありました。
おわりに
MacのTouch ID認証による1PasswordからのAWSのワンタイムパスワード(OTP)取得を試してみました。
これによりOTPが必要なAWSアカウントの認証であっても、op vault ls
とop item get <ID> --otp
をスクリプトに組み込めばスムーズに認証が行えそうです。
参考
- Get started with 1Password CLI 2 | 1Password Developer Documentation
- AssumeRoleの一時クレデンシャルが有効期限切れなら再認証させるシェルスクリプトを作ってみた(zsh) | DevelopersIO
以上