はじめに

組織で使用するパスワードマネージャを LastPass から 1Password に乗り換えた.両者で「アイテムに対する管理者の権限」の考え方や挙動が異なっていたため,その差を吸収するための 1Password 用スクリプトを作成した.

LastPass の設定と挙動

Super admins (管理者) に対してすべての shared folder (共有フォルダ) へのアクセスを許可していた. 1Password でも同様の設定を行いたい.

  • Policy “Permit super admins to access shared folders” を有効化していた
  • このポリシーにより管理者は共有フォルダおよび共有フォルダ内に保存されたアイテムに対して自動的にアクセス権限を持つようになっていた
  • 組織内の誰かが共有フォルダを作ってアイテムを保存した際に,その共有フォルダとアイテムのどちらもが管理者から見えるようになっていた

1Password の設定と挙動

1Password は LastPass と異なり,管理者に対してすべての vaults (LastPass における共有フォルダ) およびアイテムへのアクセス権限を割り当てる機能がない.正確には vaults の manage 権限を自動的に割り当てることはできるが, vaults 内のアイテムに対する権限は自動割り当てできない.

  • 1Password はプリセットグループ Owners を持つ
  • Owners のメンバーにはすべての vaults の manage 権限が自動的に割り当てられる
  • Vaults の manage 権限はあくまで vaults という「アイテムの入れ物」に対する権限であり, vaults の中に保存された「アイテムそれ自体」に対する権限とは異なる
    • たとえ Owners メンバーであってもデフォルトでは vaults 内のアイテムにアクセスできない
  • とはいえ Owners メンバーは vaults の manage 権限を行使して vaults 内のアイテムに対する Owners の権限を設定することができる
    • つまり Owners メンバーはアイテムにアクセスしたければ自分で権限を設定してアクセスできる

まとめと対応方針

  • パスワードマネージャの管理者がすべてのアイテムにアクセスできるようにしたい
  • LastPass ではポリシーにより管理者に対して自動的にすべての共有フォルダおよびアイテムのアクセス権限を割り当てることができた
  • 1Password では Owners メンバーに対して自動的にすべての vaults のアクセス権限が割り当てられるが, vaults 内のアイテムに対する権限は別途設定が必要となる

よって 1Password にて Owners メンバーが Owners グループに対して vaults 内のアイテムのアクセス権限を割り当てるようにする.

実装

処理内容

  1. Owners メンバーが,自身がアクセス権を持つ vaults の情報を取得する
  2. Owners メンバーが,取得した vaults に対して Owners グループの権限を設定する
    • 今回はアイテムの read 権限が必要のため allow_viewing を割り当てる (後述のマニュアル参照)

必要なコマンド

  • jq
  • op (1Password CLI)

1Password CLI マニュアル

スクリプト

#!/usr/bin/env bash

GROUP="Owners"
PERMISSIONS_GRANT="allow_viewing"

read -r -a vault_ids <<< "$(op vault list --group ${GROUP} --format=json | jq -r '.[] | .id' | xargs)"

for id in "${vault_ids[@]}"
do
  echo "[${id}] grant permissions"
  op vault group grant --group ${GROUP} --permissions ${PERMISSIONS_GRANT} --vault "${id}"
done

確認事項

スクリプト実行後に Owners がすべての vaults に対して以下の権限を持っていること.

  • view_items
  • view_and_copy_passwords
  • view_item_history
  • manage_vault

今後の課題

1Password 側の提供機能次第ではあるのだが, 2023-08-28 現在の実装はコマンド実行回数 (通信) のオーダーが N であり vaults の数が増えれば増えるほど通信回数が単調増加する. op vault list コマンドで得られる vaults の情報に permissions の値が含まれていないため,現在の permissions の値によって条件分岐ができない.つまり,対象の vaults の権限がすでに設定済みであったとしても op vault group grant コマンドを実行する必要がある.

仮に vaults の数が 100 件あり,そのうち 90 件はすでに権限設定済みであったとしても,現在の実装では対応が必要な 10 件だけでなく本来対応の必要がない 90 件にも op vault group grant コマンドを実行しなければならない.今後もしも op vault list コマンドにより permissions の値も取得できるようになったなら,条件分岐して必要な 10 件のみ処理できるようになると思われる.