Bitbucket Pipelinesで「鍵」を盗まれないために:セキュアな認証管理の教科書
こんにちは。CI/CDの世界へようこそ。
Bitbucket Pipelinesを使い始めると、すぐにこんな壁にぶつかります。「どうやってサーバーやクラウドにパスワードを渡さずにログインさせるのか?」
適当な設定で突き進むと、将来的に「シークレット情報の漏洩」という悪夢を見ることになります。今日は、現場の第一線で戦うエンジニアが必ず押さえている、堅牢で美しい認証管理の極意を伝授します。これをマスターすれば、あなたのパイプラインは一段上のステージへ進化しますよ。
—
1. なぜ「ハードコーディング」が死を招くのか?
初心者がやりがちな最大の過ちは、Gitのリポジトリ内にパスワードやAPIキーを直接書き込んでしまうことです。
これをしてしまうと、リポジトリの履歴から一生消えない「脆弱性」を自ら埋め込んでいるのと同じです。
Bitbucket Pipelinesでは、環境変数(Repository Variables)という機能を使います。これは、パイプライン実行時にのみメモリ上に展開される特殊な箱です。これを使わない手はありません。
—
2. 第一歩:Repository Variables(環境変数)の魔法
まずは、環境変数を安全に設定する方法です。
1. Bitbucketでリポジトリを開く
2. 左メニューの [Repository settings] をクリック
3. [Pipelines] セクションの [Repository variables] を選択
ここで重要なのは、「Secured」チェックボックスを必ずオンにすることです。
これにチェックを入れると、パイプラインのログ画面でその値が `` とマスクされ、誰も中身を見ることができなくなります。
- Key: `DEPLOY_PASSWORD`
- Value: `あなたの秘密のパスワード`
- Secured: オンにする!
—
3. デプロイキー:サーバーへの「通行証」を限定的に発行する
次に、外部サーバーにコードを同期させるケースを考えましょう。ここで「ユーザーの全権限パスワード」を渡すのは危険です。
代わりに使用するのがデプロイキー(SSHキー)です。
ステップ1:SSHキーの生成
Bitbucketの [Repository settings] > [SSH keys] に移動します。
ここで「Generate keys」を押すと、公開鍵と秘密鍵が生成されます。
ステップ2:公開鍵をサーバーに登録
生成された「Public key」をコピーし、デプロイ先サーバーの `~/.ssh/authorized_keys` に追記してください。これにより、そのリポジトリ専用の通行証がサーバーに渡されます。
ステップ3:Known Hostsの設定
SSH接続時に「このサーバーを信頼しますか?」という警告が出ないように、サーバーのフィンガープリントを「Known hosts」に追加しておくのがプロの作法です。
—
4. Hello World:安全なデプロイパイプライン
では、これらを統合した `bitbucket-pipelines.yml` を見てみましょう。
bitbucket-pipelines.yml
image: atlassian/default-image:latest
pipelines:
default:
- step:
name: Secure Deployment
script:
# SSHエージェントに秘密鍵を登録(自動的に行われる)
# $DEPLOY_PASSWORDなどの環境変数は以下のように参照
- echo “デプロイを開始します…”
- scp -o StrictHostKeyChecking=no ./dist/app.zip user@your-server:/var/www/app/
- ssh -o StrictHostKeyChecking=no user@your-server “unzip /var/www/app/app.zip && ./deploy.sh”
# 環境変数は自動的にパイプラインの環境に注入されます
解説:
- `StrictHostKeyChecking=no`: 初回接続時のホスト確認をスキップする設定ですが、本番環境では `known_hosts` にフィンガープリントを登録して明示的に制御する方がより安全です。
- `$変数名`: 環境変数はこのように `$` をつけるだけで参照できます。
—
5. プロの知見:管理サイクルを回す
最後に、最も大切な「運用」の話をします。どんなに優れた鍵も、持ち歩いていれば紛失のリスクがあります。
1. ローテーションの自動化:
理想を言えば、APIキーは3ヶ月に一度は更新するべきです。GitOpsの考え方を取り入れ、環境変数を変更するだけでデプロイ先が更新される状態を維持しましょう。
2. 権限の最小化:
デプロイキーには「読み取り専用」または「特定のディレクトリへの書き込み権限」のみを付与してください。ルート権限を与えてはいけません。
3. ログの監視:
誰がいつデプロイを実行したか、Bitbucketのパイプライン履歴をチームで共有しましょう。
—
先輩エンジニアからのアドバイス
認証管理は「面倒くさい」と感じるかもしれません。しかし、この一手間を惜しまないエンジニアこそが、信頼されるエンジニアです。
最初は `HelloWorld` のように単純なデプロイから始めてみてください。一度この「安全な道」を通る癖をつければ、どんな大規模なシステムを構築する際にも揺らぐことのない自信が持てるようになります。
さあ、あなたのパイプラインを今日からセキュアで最高のものにアップデートしましょう!応援しています。