GH GambleHub

構成とシークレットの管理

コンフィギュレーションとシークレットの管理

1)なぜそれを必要とします

構成と秘密は、生産プラットフォームの「血」です。設定のエラーがp95に落ちます。漏洩した秘密はP1インシデントです。目標はconfig/secretを作ることです:
  • 予測可能(スキーム、検証、バージョン)。
  • 安全(暗号化、最小権限、回転)。
  • 管理(GitOps、監査、ロールバック)。
  • それが正当化される動的な場所(特徴フラグ、限界のパラメータ化)。

2)アーティファクトの分類

パブリックコンフィギュレーション:フィーチャー、しきい値、タイムアウト、フィーチャーフラグ(シークレットなし)。
機密コンフィギュレーション:クリティカルパスの動作を変更するパラメータ(支払制限など)。
秘密:パスワード/キー/トークン/証明書/暗号化資料。
信頼アーティファクト:ルート/中間証明書、PKIポリシー、KMSキー。

独立した保管と権利の原則:公共≠機密≠秘密。

3)構成階層

レイヤーの「ピラミッド」を構築する:

1.グローバルデフォルト(組織全体)

2.環境('prod/stage/dev')。

3.地域('eu-central-1'、 'us-east-1')。

4.テナント/ブランド(マルチテナント)

5.サービス(特定のマイクロサービス)。

6.Override (runtime)-一時的なスイッチ。

合併規則:「以下の勝利」、競合-MR/承認を通じてのみ。

例(YAML)

yaml defaults:
http:
timeout_ms: 800 retry: 2 prod:
http:
timeout_ms: 1200 service: payments-api overrides:
eu-central-1:
http:
timeout_ms: 1500

4)スキームと検証

各設定はスキーム(CIのJSON スキーマ/OPA/バリデータ)を持つコントラクトです。

タイプ、範囲、必須フィールド、デフォルト値。
「ガードルール」('retry> 5'、 'p95_target <50ms'には設定できません)。
自動チェックインCIと適用されたとき(入場webhook/KRM)。

JSONスキーマフラグメント

json
{
"type":"object",
"properties":{
"http":{"type":"object","properties":{"timeout_ms":{"type":"integer","minimum":100,"maximum":10000},"retry":{"type":"integer","minimum":0,"maximum":5}},"required":["timeout_ms"]},
"feature_flags":{"type":"object","additionalProperties":{"type":"boolean"}}
},
"required":["http"]
}

5)設定デリバリーモデル

静的(画像焼き):信頼性がありますが、再起動が必要です。
Push/Watch :/sidecarエージェントはアップデート(ストリーム/ポーリング)を受信し、アプリケーションにシグナルを送信します。
起動時にスナップショットを取得します(ホットパスを簡素化)。
地理分散負荷のエッジキャッシュ/プロキシ。

主なもの:スナップショットの原子性とバージョン管理、互換性制御と高速ロールバック。

6)ツールと役割

Config stores: Git (source of truth)+GitOps (Argo/Flux)、 Parameter Store/Config Service。
シークレットリポジトリ:Vault、 AWS Secrets Manager/SSM、 GCP Secrets、 Azure KV。
暗号化:KMS/HSM、 SOPS (age/GPG/KMS)、シールされた秘密、トランジット暗号化(Vault)。
Delivery: CSI Secrets Store、 Vault Agent Injector/Sidecar、 init-containers。
フラグ/ダイナミクス:フィーチャー・フラグ・プラットフォーム(緊急キルスイッチを含む)。

7)暗号化: モデルとプラクティス

残りで:プロジェクト/環境のKMSキー、エンベロープ暗号化。
トランジット中:相互認証を持つTLS/mTLS。
使用時:プロセスメモリ/サイドカーで(ディスクに書き込むことなく)できるだけ遅く復号します。
キー階層:ルート(HSM)→KMS CMK→データキー(DEK)。
ローテーション:カレンダー(90/180日)+イベント別(従業員の妥協/出発)。

8)秘密管理: パターン

8.1 GitOps+SOPS(静的スナップショット)

Gitは暗号文のみを格納します。
CI/CDまたはクラスタ(KMS/age)での復号化。
コントローラ経由のアプリケーション(Flux/Argo)→Kubernetes Secret。

yaml apiVersion: v1 kind: Secret metadata: { name: psp-keys, namespace: payments }
type: Opaque data:
apiKey: ENC[AES256_GCM,data:...,sops]

8.2ボールトエージェントインジェクタ

サービスアカウント(JWT/SA)はVaultで認証されます。
Sidecarはtmpfsにクレジットを入れ、TTLに更新します。
ダイナミッククレジット(DB、クラウド-分離および短期)のサポート。

yaml annotations:
vault. hashicorp. com/agent-inject: "true"
vault. hashicorp. com/role: "payments-api"
vault. hashicorp. com/agent-inject-secret-db: "database/creds/payments"

8.3 CSIシークレットストア

シークレットをボリュームとしてマウントし、回転は透明です。
PKIの場合-証明書/キーの自動更新。

9) Kubernetes: 実用性

ConfigMap-公開/無感覚データのみ。
秘密-機密性(base64-暗号化なし;enable encryption at Rest for etcd)。
チェックサム注釈:configを変更するときにDeploymentを再起動します。
入場管理:「ホワイトリスト」からではない秘密をマウントすることの禁止、マニフェストでの「明白な」パスワードの禁止。
NetworkPolicy:秘密プロバイダ(Vault/CSI)へのアクセスを制限します。

チェックサム例(ヘルム)

yaml annotations:
checksum/config: {{ include (print $.Template. BasePath "/configmap. yaml"). sha256sum }}

10)アクセスポリシー(RBAC/ABAC)

少なくとも特権:サービスはその秘密を見るだけです。namespace/label/prefixでアクセスします。
分割作業:コンテンツを読む≠に秘密を作成する。あらゆる読書を監査して下さい。
一時的なクレジット:TTLと自動回転で動的ログイン(DB、クラウド)。
セグメンテーション:prod/stage in different projects/accounts/KMS keys。

11)監査、記録、観察可能性

読み取り/発行秘密のログ:who/when/what/where;リリースやインシデントとの相関。
メトリクス:呼び出しの頻度、期限切れの秘密、期限切れの証明書、ダイナミッククレジットの共有。
セキュリティイベント-クォータを超え、IP/時間異常、複数の認証に失敗しました。

12)秘密と証明書の回転

用語を標準化:APIキー-90日、DBパスワード-30日、TLS serts-60-90日。
回転輪郭:generation→test→double publication (grace)→switching→revocation of old→verification。
信頼性:configs/secretsのダブルエントリ、クライアント互換性(new+oldを受け入れます)。
PKI:独自のCAまたは外部との統合。CSI/Vaultを通じてmTLSコンテンツを自動的に更新します。

13)動的構成および特徴の旗

config service/flagプラットフォームから「hot」パラメータ(制限、タイムアウト)を取得します。
ローカルキャッシュと粘着性(ハッシュによるバリアントの計算)、短いTTL。
SLOは、機密パラメータを変更するためにガードします(自動ロールバックとキルスイッチ)。

14) CI/CDおよびGitOpsとの統合

プリコミット/CI:サーキットリンタ、SOPSチェック、「裸の」秘密の禁止(スキャナ:gitleaks/trufflehog)。
ポリシーゲート:OPA/Conftest-スキーマなし/オーナーアノテーションなし/環境ラベルなしの構成を禁止します。
プログレッシブデリバリ:アーティファクト(semver)としてのconfigsのプロモーション、パラメータを変更するためのカナリア。
リリースアノテーション:who/what config/secret changed;p95/5xxとの速い相関。

15)例

15.1 OPAポリシー:ConfigでのOpen SGの禁止

rego package policy. config

deny[msg] {
input. kind == "SecurityGroupRule"
input. cidr == "0. 0. 0. 0/0"
input. port = = 5432 msg: = "Postgres open internet banned"
}

15.2設定スナップショットの例(バージョン管理済み)

yaml version: 1. 12. 0 owner: payments-team appliesTo: [ "payments-api@prod" ]
http:
timeout_ms: 1200 retry: 2 withdraw:
limits:
per_txn_eur: 5000 per_day_eur: 20000 flags:
new_withdrawal_flow: false

15.3 Vault-動的データベースクレジット

hcl path "database/creds/payments" {
capabilities = ["read"]
}
role issues user/password with TTL = 1h and auto-rollover

16)アンチパターン

clear text/in Helm/Ansible変数で暗号化なしのGitの秘密。
すべてのサービス/環境のための単一の「メガシークレット」。
TTL/回転なしの長寿命トークン。「不滅の」証明書。
スキーム/検証なし、および監査変更なしの動的構成。
etcd/KMSおよびmTLS以外のネットワークのRestでの暗号化はありません。
製品内の構成の手動編集(GitOpsをバイパス)。
開発者への「念のために」営業秘密へのアクセス。

17)実装チェックリスト(0-60日)

0-15日

コンフィギュレーション用のダイアグラム/バリデータを含める。repo 「configs」とGitOpsストリームを起動します。
KMSと暗号化を上げる:SOPS/Sealed Secrets/Encryption at Rest in etcd。
CI(スキャナー)で平文の秘密を禁止し、所有者/承認を入力します。

16-30日

ボルトを分割する:パブリックコンフィギュレーションと機密コンフィギュレーションとシークレット。
Vault/Secrets Managerを実装し、配信パス(Agent/CSI/SOPS)を選択します。
TLS/DB/PSPクレジットの回転を設定します。ダッシュボード「寿命/期限切れ」。

31-60日

SLOゲートと自動ロールバックを使用したダイナミックコンフィギュレーションとフラグ。

OPA/Conftestポリシー;zero-trust(名前空間/label-scopedアクセス)

ゲームの日:秘密の漏出および力の回転のシミュレーション。

18)成熟度の指標

暗号化下での秘密の%とGitからの直接アクセスなし=100%。
構成/検証カバレッジ≥ 95%です。
重要な秘密を回転させる平均時間(ターゲット:時間、日数ではありません)。
ダイナミッククレジット(DB/クラウド)のシェア≥ 80%です。
「明白な秘密「/期限切れの証明書による0件のインシデント。
MTTR on config error with rollback <5分。

19)コマンドロールとプロセス

構成所有者:ドメイン/スキーマ/ポリシー所有者。
セキュリティ:ポリシー、キー階層、アクセス監査。
プラットフォーム/SRE: GitOps、供給/注入、テレメトリー。
アプリチーム:config/secretの消費、互換性テスト。

20)結論

コンフィギュレーションとシークレットの信頼性の高い輪郭は+GitOps+encryption+rotation+policyスキームです。公開と秘密を分離し、すべてを暗号化し、構成を原子的およびバージョン的に適用し、クレジットの権利と寿命を最小限に抑え、回転と監査を自動化します。その後、変更は迅速かつ安全になり、漏れや転倒のリスクは最小限に抑えられます。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。