macでGPGを使う
GPGのインストール
Homebrewを使ってGPGをインストールします。
brew install gnupg
GPGキーの作成
暗号化に使うためのGPGキーを作成していない場合は、以下のコマンドで新しいキーを作成します。
gpg --full-generate-key
-
暗号化タイプの選択 (RSAやECDSAなどを選択。基本的にはデフォルトでOK)
-
キーの長さを指定 (通常は2048や4096を推奨)
-
有効期限を設定 (必要に応じて設定、無期限なら「0」を入力)
-
名前、メールアドレス、コメントを入力 (特に決まっていない場合は自分の情報を入力)
-
パスフレーズの設定 (重要です。キーを守るための強力なパスフレーズを入力)
ファイルを暗号化する手順
暗号化したいファイル(例えば secret.txt)を用意します。 次のコマンドを使って、そのファイルをGPGで暗号化します。
gpg --output secret.txt.gpg --encrypt --recipient "あなたのメールアドレス" secret.txt
- –output secret.txt.gpg: 出力する暗号化されたファイル名を指定。
- –encrypt: ファイルを暗号化するオプション。
- –recipient “あなたのメールアドレス”: 暗号化を解除できるユーザー(自分のメールアドレス)を指定。
暗号化されたファイルの復号
復号する際は、次のコマンドを使います。
gpg --output secret.txt --decrypt secret.txt.gpg
これにより、暗号化された secret.txt.gpg ファイルを復号して元の secret.txt に戻すことができます。
メモ
- もし複数の公開鍵がある場合、適切な公開鍵が自分のものか確認し、–recipient オプションに正しい鍵(自分のもの)を指定してください。
- 暗号化後は、元のファイル(平文の secret.txt)を削除して、セキュリティを高めることをお勧めします。
AWSの認証情報を保存したい(docker-credential-passがgnupgを使っている)
mac OSでDockerを使う場合、通常は docker-credential-osxkeychain に認証情報が保存される
が、dockerコンテナ内で作業している場合は、コンテナの外にある docker-credential-osxkeychain
は使えない(使用しているライブラリもコンテナとホストOSで違うので、そのままでは動作しないだろう)
私は作業用コンテナにUbuntuのイメージを使っている。この場合、下記の選択肢が取れそう、passの方が一般的のようだったのでこちらを導入した(内部的にgnupgを利用する)
- docker-credential-pass
- docker-credential-secretservice(GNOME Keyring を利用)
コンテナ内でもawsの認証情報を使えるようにするための設定をまとめた
1. 必須パッケージをインストール
apt-get update
apt-get install -y gnupg gpg-agent pass pinentry-curses dirmngr
2. GnuPG の準備
# GnuPGホームディレクトリ作成
mkdir -p ~/.gnupg
chmod 700 ~/.gnupg
/run/user配下にディレクトリを作成する権限が無い場合、rootが作成し、所有者情報、権限をユーザに合わせる必要がある
# GPG エージェント用ソケット置き場
export XDG_RUNTIME_DIR=/run/user/$(id -u)
mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"
# 端末設定(pinentry のため)
export GPG_TTY=$(tty)
# keyboxd を避ける(安定用)
echo 'no-use-keyboxd' >> ~/.gnupg/gpg.conf
echo 'allow-loopback-pinentry' >> ~/.gnupg/gpg-agent.conf
3. GPG キーを生成
対話的に作成:
gpg --full-generate-key
非対話で作成(例: 1年有効):
gpg --quick-generate-key "docker-pass <docker@example>" default default 1y
4. KEYID の確認
gpg --list-secret-keys --keyid-format=long
5. pass を初期化
pass init <KEYID か フィンガープリント>
pass ls で確認( 初期化直後は「Password Store」だけ表示されればOK )
6. Docker 設定
{
"credsStore": "pass",
"auths": {}
}
7. ECR にログイン
aws ecr get-login-password --region ap-northeast-1 \
| docker login --username AWS --password-stdin <AWS ID>.dkr.ecr.ap-northeast-1.amazonaws.com
補足
pass の保存先は ~/.password-store。内容は GPG で暗号化されている。 ホストとコンテナで使い回したい場合は以下をボリュームマウントすると便利:
-v $HOME/.gnupg:/root/.gnupg \
-v $HOME/.password-store:/root/.password-store \
-v $HOME/.docker:/root/.docker
GPG_TTY は常に設定しておくと安定する。