🔒

1passwordで始めるセキュアな開発環境

2024/02/24に公開

TL;DR

  • 環境変数って怖くね?
  • 1Password CLI最高

環境変数ヤメロー!!

環境変数は持ち運び辛い

# Setup
$ export HOGE_VAR=<内緒のID>
つぎに
npm dev:watch
.....

リポジトリを切り替えることが頻繁に起きる場合、こういった操作が毎回要求されてだるいよね。


お前は今まで叩いたenv | grepの数を覚えているか?

ファイル管理も危ない

サードパーティのOSSをいろいろ使いながら開発する中で、もしかしたら環境変数やファイルを覗かれてるかもしれない。
もしかしたらGitにあげてしまっているかもしれません。
(GithubのSecretScanにヒットしたことありますよね?)

開発における危険性

DBの認証用パスワード、AWSのトークン、これらをシェルで環境変数として設定することは頻繁にあります。

$ export DB_PASSWORD=J_lYhxifBdmvLkI

こういった操作は実はそれなりに危険です。なぜなら...

  • シェルのヒストリーに履歴として平文で記録されてしまう
  • コピペ作業を伴うため、クリップボードに平文で記録されてしまう

1Password CLIサイコー!!

https://1password.com/jp/downloads/command-line/
ここからインストール
macなら

$ brew install 1password-cli

opの呼吸壱の型run

op runコマンドは次に実行するコマンドにopの環境変数を渡しながら実行することができます。

AWS_SECRET_ACCESS_KEY=op://prod/aws/secret-key
AWS_ACCESS_KEY_ID=op://prod/aws/access-key
$ op run --env-file yourscript.env -- yourscript.sh

この手順だと、環境変数にクレデンシャルが保持される範囲が実行スクリプトだけにとどまるので非常に安全と言えるでしょう

opの呼吸弐の型read

壱の型runだとクレデンシャルがスクリプトに絞り込めますが、readは単純にクレデンシャルを取得するコマンドなので、特定の命令内に絞り込めます。もっと安全ですね。

#!/bin/bash

docker login -u $(op read op://prod/docker/username) -p $(op read op://prod/docker/password)

opの呼吸参の型op://$ENV

op://記法は便利だけど、状況によって参照する保管庫(=vault)を動的に切り替えたい。
もちろんop://記法に変数注入もできますヨ!

docker login -u $(op readop://$ENV/docker/username)

opの呼吸肆の型 Shell plugins

CLIでGithubやAWSへアクセスすることは頻繁にあります。アクセストークンをローカルに保持してアクセスします。
これの保存先をローカルから1Passwordへ変更します。(aws-vaultで実現していることをいろいろなサービスで実現できます)
shellに渡されるのは一時トークンのみになります。

opの呼吸伍の型 AppleWatch

Macで1Passwordの認証は☝️指紋認証が要求されます。
AppleWatchを装着した状態だと、指を2回つまむだけで認証でき、コマンドをスムーズに実行できます。

まとめ

1Password最高!

Discussion