シークレット管理 - 暗号化全般

暗号化全般 | IT用語集

シークレット管理とは

シークレット管理(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付き)

権威あるリソース

関連用語

この用語についてもっと詳しく

シークレット管理に関するご質問やセキュリティ設計のご相談など、お気軽にお問い合わせください。