enforcing-password-policies について
enforcing-password-policiesは、CockroachDBクラスターのパスワード要件を設定するスキルです。データベース管理者が最小文字数とbcryptハッシュコストを設定し、適用状況を検証して、既存ユーザーやアプリケーションへの影響を管理できます。
主な機能
- 01パスワードの最小文字数設定
- 02bcryptハッシュコストの設定
- 03SQLによるポリシー適用の検証
- 04既存ユーザーのパスワード変更管理
- 05パスワードと認証エラーの調査
活用シーン
- 01監査で指摘された弱いパスワードへの対応
- 02本番クラスターへのパスワード要件の適用
- 03ブルートフォース攻撃への耐性向上
- 04ユーザーやサービスアカウントの変更計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cockroachlabs/ cockroachdb-skills --skill enforcing-password-policiesインストール後、Claude Code で/enforcing-password-policiesを入力して読み込まれたか確認します。
同梱ファイルreferences/sql-queries.md
詳細
パスワードポリシーの適用
CockroachDB クラスターにパスワードポリシーを設定して適用します。最低パスワード長と bcrypt のハッシュコストを設定し、パスワード強度が組織の要件やコンプライアンス要件を満たすようにします。
このスキルを使用する場面
- コンプライアンス基準(SOC 2、HIPAA、NIST 800-63B)を満たすためにパスワード要件を強化する場合
- 新しい本番クラスターのパスワードポリシーを設定する場合
- 脆弱なパスワードポリシーに関するセキュリティ監査の指摘に対応する場合
- ブルートフォース攻撃への耐性を高めるために bcrypt のハッシュコストを上げる場合
前提条件
- SQL アクセスと管理者ロール(クラスター設定の変更に必要)
- **影響の理解:**パスワードポリシーの変更は新しいパスワードにのみ適用され、既存のパスワードには適用されません
アクセス権を確認します:
SELECT member FROM [SHOW GRANTS ON ROLE admin] WHERE member = current_user();
手順
1. 現在のパスワードポリシー設定を確認する
-- Minimum password length
SHOW CLUSTER SETTING server.user_login.min_password_length;
-- Password hash cost (bcrypt rounds)
SHOW CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt;
パスワード関連のクエリについては、SQL クエリのリファレンスを参照してください。
2. 最低パスワード長を設定する
-- Set minimum password length to 12 characters (recommended)
SET CLUSTER SETTING server.user_login.min_password_length = 12;
コンプライアンスフレームワーク別の推奨最低値:
| フレームワーク | 最低長 | 推奨事項 |
|---|---|---|
| NIST 800-63B | 8 文字 | 12 文字以上を推奨 |
| SOC 2 | 8 文字 | 12 文字以上を推奨 |
| HIPAA | 8 文字 | 12 文字以上を推奨 |
| PCI DSS | 7 文字 | 12 文字以上を推奨 |
| 社内のベストプラクティス | — | 管理者アカウントは 14 文字以上 |
3. ハッシュコストを設定する
bcrypt のハッシュコストは、パスワードのハッシュ化に必要な計算量を制御します。値を大きくするとブルートフォース攻撃にかかる時間が長くなりますが、認証時の CPU 負荷が増加します。
-- Set bcrypt hash cost (default: 10, recommended: 12)
SET CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt = 12;
ハッシュコストの目安:
| コスト | ハッシュあたりの時間(概算) | 推奨事項 |
|---|---|---|
| 10 | 約 100 ms | デフォルト。多くの場合に適切 |
| 12 | 約 400 ms | 本番環境に推奨 |
| 14 | 約 1.5 秒 | 高いセキュリティ。ログインが遅くなる |
**トレードオフ:**コストを上げるとパスワードの検証に時間がかかり、ログインのレイテンシに影響します。コスト 12 はバランスの取れた値です。
4. 適用を確認する
-- Confirm settings
SHOW CLUSTER SETTING server.user_login.min_password_length;
SHOW CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt;
適用をテストします:
-- This should fail if min_password_length is 12
CREATE USER test_weak_password WITH PASSWORD 'short';
-- Expected: ERROR: password too short
-- This should succeed
CREATE USER test_strong_password WITH PASSWORD 'a-secure-password-123';
DROP USER test_strong_password;
5. 脆弱なパスワードを使用している既存ユーザーに対応する
パスワードポリシーの変更は新しいパスワードにのみ適用されます。既存のユーザーは、パスワードを変更するまで以前のパスワードを引き続き使用できます。
パスワードの定期変更を適用する方法:
- **ポリシー変更を周知し、**ユーザーにパスワードの更新を依頼します
- **既存のパスワードを期限切れにし、**次回ログイン時にパスワード変更を求めます(アプリケーション層が対応している場合)
- 重要なアカウントのパスワードを管理者がリセットします:
-- Reset a user's password (forces them to use a new, policy-compliant password)
ALTER USER <username> WITH PASSWORD '<new-strong-password>';
6. パスワード変更と定期変更を管理する
ユーザー自身によるパスワード変更
SQL ユーザーは自分のパスワードを変更できます:
-- User changes their own password (CURRENT_USER, no parens)
ALTER USER CURRENT_USER WITH PASSWORD '<new-password>';
**注:**デフォルトでは、管理者以外のユーザーも自分のパスワードを変更できます。パスワードを変更できないとユーザーから報告があった場合は、正しいユーザーとして接続していることと、HBA ルールがパスワード認証をブロックしていないことを確認してください。
管理者によるパスワードのリセット
-- Admin resets another user's password
ALTER USER <username> WITH PASSWORD '<new-strong-password>';
-- Verify the user exists before resetting
SELECT username FROM [SHOW USERS] WHERE username = '<username>';
Cloud Console のパスワードと SQL パスワード
CockroachDB Cloud には、別々のパスワード領域が 2 つあります。
- Cloud Console のパスワード — Cloud Console の UI または SSO で管理します。Cloud Console のログインページにある「パスワードをお忘れですか」の手順でリセットします。
- SQL ユーザーのパスワード — SQL の
ALTER USERで管理します。Cloud Console のパスワードとは独立しています。
一方を変更しても、もう一方には影響しません。両方のアクセス方法を使用するユーザーは、両方を管理する必要があります。
パスワードの定期変更に関するベストプラクティス
- サービスアカウントのパスワードを定期的に変更します(例:90 日ごと)
- パスワードの定期変更を不要にするため、サービスアカウントには証明書ベースの認証を使用します
- ダウンタイムを避けるため、パスワードの定期変更をアプリケーションのデプロイサイクルと調整します
- パスワード変更後は、古いパスワードを無効にする前に、新しい認証情報でアプリケーションが接続できることを確認します
7. よくあるパスワードエラーのトラブルシューティング
「password too short」
パスワードが min_password_length 設定を満たしていません。
-- Check the current minimum
SHOW CLUSTER SETTING server.user_login.min_password_length;
対処方法:最小文字数以上の長いパスワードを使用してください。
「bcrypt password hash too long」
パスワードが bcrypt の入力上限である 72 バイトを超えています。非常に長いパスワードや、マルチバイトの Unicode 文字を含むパスワードで発生することがあります。
-- Workaround: use a shorter password (under 72 bytes)
ALTER USER <username> WITH PASSWORD '<shorter-password>';
これは bcrypt の制限であり、CockroachDB 固有の問題ではありません。
パスワード変更後の認証失敗
ユーザーから、パスワードを変更した直後に認証に失敗すると報告された場合は、次の点を確認してください。
- パスワードが正しく設定されたことを確認します(コピー&ペースト時に空白が入っていないか)。
- 古い認証情報が接続プールにキャッシュされていないか確認します。接続プールを再起動してください。
- HBA 設定でパスワード認証が許可されていることを確認します。
SHOW CLUSTER SETTING server.host_based_authentication.configuration;
安全性に関する考慮事項
- 新しいパスワードのみ:
min_password_lengthを変更しても、既存のパスワードは無効になりません。短いパスワードを使用しているユーザーは、パスワードを変更するまで引き続きログインできます。 - ハッシュコストによる遅延:
crdb_bcryptのコストを上げると、ログインにかかる時間が長くなります。コストを 12 より大きく設定する前に、実際の利用状況に即した接続プールでテストしてください。 - サービスアカウント: サービスアカウントでは、強力なパスワードまたは証明書ベースの認証を使用してください(証明書を使用する場合、パスワードポリシーは適用されません)。
ロールバック
-- Reset minimum password length to default (1 = no minimum)
SET CLUSTER SETTING server.user_login.min_password_length = 1;
-- Reset hash cost to default
RESET CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt;
参考資料
スキルの参考資料:
関連スキル:
- auditing-cloud-cluster-security — セキュリティ体制の包括的な監査を実施します
- configuring-sso-and-scim — SSO を使用してパスワードベースの認証をなくします
- managing-tls-certificates — パスワードの代わりに証明書ベースの認証を使用します
CockroachDB 公式ドキュメント: