コードとしてのポリシー
1)「政治」とカウントするもの"
ポリシーとは、コンテキストを考えると「can/cannot」(または「how recently can」)という質問に答える決定的なルールです:- アクセス/承認:RBAC/ABAC、 ReBACのデータ輸出、ステップアップ(MFA)。
- インフラセキュリティ:入場制御Kubernetes、画像/シークレットポリシー、ネットワークルール。
- コンプライアンスとプライバシー:同意管理、PIIタグ付け、現地報告日、地理的制限。
- 構成と品質:「deny: latest」、リソース制限、必須リソースタグ(Cloud)。
- データとML:同意のないセットでのトレーニングの禁止、k-anonymity、 DP-budgets、 Data Lineage-invariants。
2) PaC建築モデル
PAP (Policy Administration Point):リポジトリおよび管理プロセス(MR/PR、レビュー、バージョン)。
PDP (Policy Decision Point):ポリシー決定を計算するエンジン(OPA、 Cedar-engine、ネイティブインタプリタ)。
PEP(ポリシー執行ポイント):アプリケーションポイント(APIゲートウェイ、K8sのWebhook管理、ETLトランス、SDK)。
PIP (Policy Information Point):属性/事実のソース:IdP、リソースディレクトリ、データウェアハウス、リスクレート。
意思決定ログ/監査:変更できないソリューションログ(インシデント分析およびコンプライアンス用)。
ストリーム:request→PEP forms context→PDP loads facts (PIP)→calculates solution→PEP applies (allow/deny/edit)→log/metrics。
3)ツールとドメイン
OPA/Regoは、宣言的ポリシーのための普遍的なエンジンと言語です(K8sのwebhook管理:Gatekeeper、 CI-Conftest、 API-sidecar/service)。
Kyverno-YAMLでのKubernetesの宣言的ポリシー、パッチ/検証/生成。
シーダー(AWS/ポータブル)はwho-over-what承認に焦点を当てた政策言語です。
クラウドIAM (AWS/GCP/Azure)-クラウドリソースポリシー(できればPaC静的プランとIaCプランで確認)。
カスタム-詳細については、JSON/SQLを超えるDSL/ルール(たとえば、MLコンプライアンス)。
4)ポリシーライフサイクル
1.ターゲットとドメインの定義:「High/CRITICAL脆弱性を持つコンテナのロード禁止」。
2.コードの形式化:Rego/Cedar/YAML。
3.テスト:真実のテーブル、否定的なケース、プロパティベース。
4.CIチェック:linter、 unit、架空のマニフェスト/リクエストの統合。
5.リリースと配布:バンドル、署名、PDP/edgeへの配信。
6.モニタリング:ヒットレート、レイテンシp95/p99、シェア拒否、ドリフトダッシュボード。
7.例外/免除:時間/ボリュームが制限され、監査され、所有されています。
8.リファクタリングとアーカイブ:バージョン、互換性、移行。
5)貯蔵および配分
リポレイアウト:'policies/< domain>/<policy> 。rego' cedar 'yaml'、 'tests/'、' bundles/'、 'schemas/'。
バージョン管理:PDPレスポンスのsemverと'policy_version'。
バンドル-圧縮ポリシーパッケージ+スキーマ+configs、署名済み(サプライチェーンセキュリティ)。
ディストリビューション:プル(registry/S3からPDPプル)またはプッシュ(コントローラが送信)。
部分評価:境界での迅速な実行のためのポリシーを予測します。
6)データモデルとスキーマ
単一のコンテキスト契約:'subject'、 'resource'、 'action'、 'env'、 'legal'。
JSON スキーマ/Protobuf:実際のモデルを検証する。schema mismatch-「indeterminate→deny」の原因。
属性正規化:統一された名前(例:'tenant_id'、 'risk_level'、 'pii_tags'、' image。「ハルス」)。
7)性能および信頼性
ソリューションキャッシュ:キー'(subject_hash、 resource_key、アクション、policy_version)';短いTTL、イベントによる障害(ロール/タグ変更)。
ローカルの事実:ホットトラック上の重いPIPを引っ張らないでください-同期スナップショット。
フェイルオープンとフェイルクローズ:クリティカルドメインセキュリティ-フェイルオープン;UX-critical-degradation (denyではなくedition)の場合。
レイテンシーバジェット:PDPメモリの1ソリューションあたりのターゲット'<3-10ミリ秒'、PIPでの'<30-50ミリ秒'。
8)例外管理(免除)
限られた時間(例えば。7日)、必須の所有者および理由と。
結合:resource/project/namespace;グローバルな「永遠」を禁止します。
監査とリマインダー:期限切れの免除、自動クローズ/エスカレーションに関するレポート。
9)指標と観測可能性
ポリシーカバレッジ:PaCによって保護されたパス/エンドポイントの割合。
決定待ち時間/QPS/エラー率。
[Rate]と[False Positive/Negative](ドライラン/シャドウモードで)を拒否します。
Drift:プラン(IaC)とファクト(ライブ)の間、SDKとサーバーソリューション間の不一致。
「decision_id、 policy_ids、 version、 attributes_digest、 effect、 reason」。
10)アンチパターン
ポリシー「hardwired」バージョンとテストなしでコードに。
回路図/コンテキスト検証の欠如→予測不可能な決定。
1つのモノリシックファイル"mega。レゴ"
例外はありませんプロセス→手動ラウンドとカオス。
CIでshift-leftのないランタイムアプリケーションのみ(遅延障害)。
ポリシーの隠された副作用(ポリシーは純粋な関数でなければなりません)。
11)例
11.1 Rego (OPA)-K8sで脆弱な画像を拒否する
rego package k8s. admission. vulns
deny[msg] {
input. kind. kind == "Pod"
some c img:= input. request. object. spec. containers[c].image vulns:= data. registry. scan [img] # actual-snapshot from PIP count ({v v:= vulns[_]; v.severity == "CRITICAL"}) > 0 msg:= sprintf("image %s has CRITICAL vulns", [img])
}
11.2 Rego: MFAとホワイトIPのみからデータをエクスポートする
rego package api. export
default allow = false
allow {
input. action == "export"
input. subject. mfa_verified == true net. cidr_contains("203. 0. 113. 0/24", input. env. ip)
}
11.3杉:オーナーまたはチームメンバーにのみ読む
cedar permit(
principal in Group::"team_members",
action in [Action::"read"],
resource in Photo::"")
when { resource. owner == principal resource. team_id in principal. team_ids };
11.4 Kyverno (YAML):禁止「:最新」と義務。リソース
yaml apiVersion: kyverno. io/v1 kind: ClusterPolicy metadata:
name: disallow-latest-and-require-limits spec:
validationFailureAction: Enforce rules:
- name: disallow-latest match: { resources: { kinds: ["Pod"] } }
validate:
message: "Image tag 'latest' is not allowed."
pattern:
spec:
containers:
- name: ""
image: "!:latest"
- name: require-limits match: { resources: { kinds: ["Pod"] } }
validate:
message: "resources. limits.{cpu,memory} required."
pattern:
spec:
containers:
- resources:
limits:
cpu: "?"
memory: "?"
11.5テラフォームプランのためのCIのConftest
bash terraform plan -out tf. plan terraform show -json tf. plan > tf. json conftest test tf. json --policy policies/terraform
12)既存の能力に埋め込む
RBAC/ABAC: PaC-宣言層;ロールエンジン記事のPDP/PEPが再利用されます。
同意管理:データ/エンドポイントのアクセス条件としての「広告/パーソナライゼーション」ポリシー。
匿名化/PII:ポリシーは、匿名化とDP予算プロファイルなしでトレーニング/エクスポートを禁止します。
ジオルーティング:ストレージ領域ごとにトラフィック/データをルーティングするためのポリシー。
13)プロセスと人々
ポリシーのドメイン所有者:セキュリティ、プラットフォーム、データ、製品/マーケティング。
レビュアー:セキュリティ+ドメイン所有者。
ポリシーカタログ:ターゲットの説明、リスク、SLO、連絡先、例、インシデントリンク。
トレーニング:開発者向けのガイドとスニペット(テストの書き方、Regoのデバッグ方法)。
14)建築家のチェックリスト
1.ドメインと所有者の最小セットが定義されていますか?
2.テスト、リンタ、CIを含むポリシーリポジトリ?
3.PDP/PEPは周囲、API、 K8s、データパイプラインに配置されていますか?
4.コンテキストダイアグラムと検証はありますか?
5.署名と配信バンドル、キャッシュ、障害戦略?
6.メトリクス(レイテンシ、拒否、ドリフト)、意思決定ログと監査?
7.TTLとレポートによる例外処理?
8.Dry-run/shadow-mode before Enforce?
9.ホットスポットの部分評価/プリコンピレーション?
10.劣化のためのRunbook (fail-closed/allow-with-redaction)?
お知らせいたします
Policy as Codeは、コード、テスト、CI/CD、メトリクス、ロールバックなど、アプリケーションと同じ原則でルールを再現、検証、管理できます。PaCを承認(RBAC/ABAC)、コンプライアンス、プラットフォームセキュリティに接続することで、入場管理からデータのエクスポート、MLパイプラインまで、システム動作のための単一の、予測可能でスケーラブルな制御ループが得られます。