シークレット管理とは
シークレット管理(Secret Management)は、パスワード、APIキー、データベース接続情報、TLS証明書、SSHキーなどの機密情報(シークレット)を安全に保管、配布、アクセス制御、監査するための包括的なプラクティスです。
適切なシークレット管理が必要な理由:
- 漏洩防止:ソースコードやログへの機密情報混入を防止
- アクセス制御:必要なサービス・ユーザーのみにアクセスを許可
- 監査:誰がいつどのシークレットにアクセスしたかを記録
- ローテーション:定期的な更新を自動化
- コンプライアンス:PCI DSS、HIPAA、SOC2などの要件を満たす
シークレット管理ツールの比較
| ツール | 特徴 | 用途 |
|---|---|---|
| HashiCorp Vault | 多機能、動的シークレット | マルチクラウド、大規模 |
| AWS Secrets Manager | AWS統合、自動ローテーション | AWSネイティブアプリ |
| Azure Key Vault | Azure統合、HSMバック | Azureネイティブアプリ |
| Kubernetes Secrets | K8s標準、Pod連携 | K8sワークロード |
| SOPS | Git管理、暗号化ファイル | GitOps |
AIエンジニアとしての実体験
機械学習パイプラインで、外部API(OpenAI、AWS Bedrockなど)の認証情報を安全に管理する必要がありました。環境変数だけでなく、HashiCorp Vaultを導入して一元管理を実現しました。
# HashiCorp Vaultからシークレットを取得
import hvac
import os
class SecretManager:
def __init__(self):
self.client = hvac.Client(
url=os.environ.get('VAULT_ADDR', 'https://vault.example.com'),
token=os.environ['VAULT_TOKEN']
)
def get_api_key(self, service_name: str) -> str:
"""外部APIのキーを取得"""
secret = self.client.secrets.kv.v2.read_secret_version(
path=f'api-keys/{service_name}'
)
return secret['data']['data']['api_key']
def get_db_credentials(self, db_name: str) -> dict:
"""動的データベース認証情報を取得"""
# Vaultが一時的な認証情報を生成
creds = self.client.secrets.database.generate_credentials(db_name)
return {
'username': creds['data']['username'],
'password': creds['data']['password'],
'ttl': creds['lease_duration']
}
# 使用例
secrets = SecretManager()
openai_key = secrets.get_api_key('openai')
db_creds = secrets.get_db_credentials('production-db')
自社サーバー運用への応用
やってはいけないこと
- ソースコードへのハードコーディング
- 設定ファイルへの平文保存
- 共有チャットやメールでの送信
- 同一シークレットの長期使用
- 過剰なアクセス権限の付与
ベストプラクティス
# git-secretsでハードコーディングを防止
git secrets --install
git secrets --register-aws
# AWS Secrets Managerからの取得
aws secretsmanager get-secret-value \
--secret-id production/database/credentials \
--query SecretString --output text
# Kubernetesでの外部シークレット連携
# external-secrets-operatorを使用
関連ブログ記事
📝 関連記事
最新動向(2026年)
ゼロトラストセキュリティとの統合
シークレット管理は、ゼロトラストアーキテクチャの重要な構成要素となっています。アイデンティティベースのアクセス制御と組み合わせて使用されます。
動的シークレットの普及
静的なAPIキーやパスワードではなく、必要な時に生成され短時間で失効する動的シークレットの採用が増加しています。
トラブル事例と対策
⚠️ GitHubへのシークレット公開
問題:APIキーをうっかりパブリックリポジトリにプッシュ
対策:git-secrets、GitHub Secret Scanning、.gitignoreの徹底
⚠️ Vault サービスダウン
問題:Vaultがダウンするとアプリケーションがシークレットを取得できない
対策:Vaultのクラスタリング、シークレットのキャッシュ(TTL付き)
