1passwordで始めるセキュアな開発環境
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サイコー!!
macなら
$ brew install 1password-cli
run
opの呼吸壱の型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
この手順だと、環境変数にクレデンシャルが保持される範囲が実行スクリプトだけにとどまるので非常に安全と言えるでしょう
read
opの呼吸弐の型壱の型run
だとクレデンシャルがスクリプトに絞り込めますが、read
は単純にクレデンシャルを取得するコマンドなので、特定の命令内に絞り込めます。もっと安全ですね。
#!/bin/bash
docker login -u $(op read op://prod/docker/username) -p $(op read op://prod/docker/password)
op://$ENV
opの呼吸参の型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