UNPKG

@pulumi/kubernetes-compliance-policies

Version:

This repository contains a growing set of Compliance Policies to validate your infrastructure using Pulumi's Crossguard Policy-as-Code framework.

408 lines (407 loc) 20 kB
"use strict"; // Copyright 2016-2024, Pulumi Corporation. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // ------------------------------- WARNING ------------------------------------- // This file was programmatically generated. Do not edit unless you know what // you're doing. // ------------------------------- WARNING ------------------------------------- Object.defineProperty(exports, "__esModule", { value: true }); exports.StatefulSet = exports.ReplicaSet = exports.Deployment = exports.DaemonSet = void 0; const v1_1 = require("@pulumi/kubernetes/apps/v1"); const policy_1 = require("@pulumi/policy"); const compliance_policy_manager_1 = require("@pulumi/compliance-policy-manager"); const v1_2 = require("@pulumi/kubernetes/apps/v1"); const v1_3 = require("@pulumi/kubernetes/apps/v1"); const v1_4 = require("@pulumi/kubernetes/apps/v1"); var DaemonSet; (function (DaemonSet) { /** * Checks that Kubernetes DaemonSets have the recommended labels. * * @severity low * @frameworks none * @topics usability * @link https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/ */ DaemonSet.configureRecommendedLabels = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-daemonset-configure-recommended-labels", description: "Checks that Kubernetes DaemonSets have the recommended labels.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_1.DaemonSet, (daemonSet, args, reportViolation) => { var _a; if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!daemonSet.metadata || !daemonSet.metadata.labels) { reportViolation("Kubernetes DaemonSets should use the recommended labels."); } else { for (const key of Object.keys((_a = daemonSet.metadata) === null || _a === void 0 ? void 0 : _a.labels)) { const recommendedLabels = [ "app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/version", "app.kubernetes.io/component", "app.kubernetes.io/part-of", "app.kubernetes.io/managed-by", ]; if (recommendedLabels.indexOf(key) === -1) { reportViolation("Kubernetes DaemonSets should have the recommended labels."); } } } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "low", topics: ["usability"], }); /** * Checks that Kubernetes DaemonSets run pods with a read-only filesystem. * * @severity high * @frameworks iso27001, pcidss * @topics runtime, security * @link https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ */ DaemonSet.enableReadOnlyRootFilesystem = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-daemonset-enable-read-only-root-filesystem", description: "Checks that Kubernetes DaemonSets run pods with a read-only filesystem.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_1.DaemonSet, (daemonSet, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (daemonSet.spec && daemonSet.spec.template.spec && daemonSet.spec.template.spec.containers.length > 0) { daemonSet.spec.template.spec.containers.forEach((container) => { if (!container.securityContext || !container.securityContext.readOnlyRootFilesystem) { reportViolation("Kubernetes DaemonSets should run their pods using a read-only filesystem."); } }); } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "high", topics: ["runtime", "security"], frameworks: ["pcidss", "iso27001"], }); })(DaemonSet || (DaemonSet = {})); exports.DaemonSet = DaemonSet; var Deployment; (function (Deployment) { /** * Checks that Kubernetes Deployments have at least three replicas. * * @severity high * @frameworks none * @topics availability * @link https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ */ Deployment.configureMinimumReplicaCount = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-deployment-configure-minimum-replica-count", description: "Checks that Kubernetes Deployments have at least three replicas.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_2.Deployment, (deployment, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!deployment.spec || !deployment.spec.replicas || deployment.spec.replicas < 3) { reportViolation("Kubernetes Deployments should have at least three replicas."); } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "high", topics: ["availability"], }); /** * Checks that Kubernetes Deployments have the recommended labels. * * @severity low * @frameworks none * @topics usability * @link https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/ */ Deployment.configureRecommendedLabels = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-deployment-configure-recommended-labels", description: "Checks that Kubernetes Deployments have the recommended labels.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_2.Deployment, (deployment, args, reportViolation) => { var _a; if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!deployment.metadata || !deployment.metadata.labels) { reportViolation("Kubernetes Deployments should use the recommended labels."); } else { for (const key of Object.keys((_a = deployment.metadata) === null || _a === void 0 ? void 0 : _a.labels)) { const recommendedLabels = [ "app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/version", "app.kubernetes.io/component", "app.kubernetes.io/part-of", "app.kubernetes.io/managed-by", ]; if (recommendedLabels.indexOf(key) === -1) { reportViolation("Kubernetes Deployments should have the recommended labels."); } } } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "low", topics: ["usability"], }); /** * Checks that Kubernetes Deployments run pods with a read-only filesystem. * * @severity high * @frameworks iso27001, pcidss * @topics runtime, security * @link https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ */ Deployment.enableReadOnlyRootFilesystem = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-deployment-enable-read-only-root-filesystem", description: "Checks that Kubernetes Deployments run pods with a read-only filesystem.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_2.Deployment, (deployment, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (deployment.spec && deployment.spec.template.spec && deployment.spec.template.spec.containers.length > 0) { deployment.spec.template.spec.containers.forEach((container) => { if (!container.securityContext || !container.securityContext.readOnlyRootFilesystem) { reportViolation("Kubernetes Deployments should run their pods using a read-only filesystem."); } }); } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "high", topics: ["runtime", "security"], frameworks: ["pcidss", "iso27001"], }); })(Deployment || (Deployment = {})); exports.Deployment = Deployment; var ReplicaSet; (function (ReplicaSet) { /** * Checks that Kubernetes ReplicaSets have at least three replicas. * * @severity high * @frameworks none * @topics availability * @link https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/ */ ReplicaSet.configureMinimumReplicaCount = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-replicaset-configure-minimum-replica-count", description: "Checks that Kubernetes ReplicaSets have at least three replicas.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_3.ReplicaSet, (replicaSet, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!replicaSet.spec || !replicaSet.spec.replicas || replicaSet.spec.replicas < 3) { reportViolation("Kubernetes ReplicaSet should have at least three replicas."); } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "high", topics: ["availability"], }); /** * Checks that Kubernetes ReplicaSets use the recommended labels. * * @severity low * @frameworks none * @topics usability * @link https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/ */ ReplicaSet.configureRecommendedLabels = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-replicaset-configure-recommended-labels", description: "Checks that Kubernetes ReplicaSets use the recommended labels.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_3.ReplicaSet, (replicaSet, args, reportViolation) => { var _a; if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!replicaSet.metadata || !replicaSet.metadata.labels) { reportViolation("Kubernetes ReplicaSets should use the recommended labels."); } else { for (const key of Object.keys((_a = replicaSet.metadata) === null || _a === void 0 ? void 0 : _a.labels)) { const recommendedLabels = [ "app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/version", "app.kubernetes.io/component", "app.kubernetes.io/part-of", "app.kubernetes.io/managed-by", ]; if (recommendedLabels.indexOf(key) === -1) { reportViolation("Kubernetes ReplicaSets should have the recommended labels."); } } } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "low", topics: ["usability"], }); /** * Checks that Kubernetes ReplicaSets run pods with a read-only filesystem. * * @severity high * @frameworks iso27001, pcidss * @topics runtime, security * @link https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ */ ReplicaSet.enableReadOnlyRootFilesystem = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-replicaset-enable-read-only-root-filesystem", description: "Checks that Kubernetes ReplicaSets run pods with a read-only filesystem.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_3.ReplicaSet, (replicaset, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (replicaset.spec && replicaset.spec.template && replicaset.spec.template.spec && replicaset.spec.template.spec.containers.length > 0) { replicaset.spec.template.spec.containers.forEach((container) => { if (!container.securityContext || !container.securityContext.readOnlyRootFilesystem) { reportViolation("Kubernetes ReplicaSets should run their pods using a read-only filesystem."); } }); } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "high", topics: ["runtime", "security"], frameworks: ["pcidss", "iso27001"], }); })(ReplicaSet || (ReplicaSet = {})); exports.ReplicaSet = ReplicaSet; var StatefulSet; (function (StatefulSet) { /** * Checks that Kubernetes StatefulSets have the recommended labels. * * @severity low * @frameworks none * @topics usability * @link https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/ */ StatefulSet.configureRecommendedLabels = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-statefulset-configure-recommended-labels", description: "Checks that Kubernetes StatefulSets have the recommended labels.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_4.StatefulSet, (statefulSet, args, reportViolation) => { var _a; if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!statefulSet.metadata || !statefulSet.metadata.labels) { reportViolation("Kubernetes StatefulSets should use the recommended labels."); } else { for (const key of Object.keys((_a = statefulSet.metadata) === null || _a === void 0 ? void 0 : _a.labels)) { const recommendedLabels = [ "app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/version", "app.kubernetes.io/component", "app.kubernetes.io/part-of", "app.kubernetes.io/managed-by", ]; if (recommendedLabels.indexOf(key) === -1) { reportViolation("Kubernetes StatefulSets should have the recommended labels."); } } } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "low", topics: ["usability"], }); /** * Checks that Kubernetes StatefulSets run pods with a read-only filesystem. * * @severity high * @frameworks iso27001, pcidss * @topics runtime, security * @link https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ */ StatefulSet.enableReadOnlyRootFilesystem = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-apps-v1-statefulset-enable-read-only-root-filesystem", description: "Checks that Kubernetes StatefulSets run pods with a read-only filesystem.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_4.StatefulSet, (statefulSet, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (statefulSet.spec && statefulSet.spec.template.spec && statefulSet.spec.template.spec.containers.length > 0) { statefulSet.spec.template.spec.containers.forEach((container) => { if (!container.securityContext || !container.securityContext.readOnlyRootFilesystem) { reportViolation("Kubernetes StatefulSets should run their pods using a read-only filesystem."); } }); } }), }, vendors: ["kubernetes"], services: ["apps"], severity: "high", topics: ["runtime", "security"], frameworks: ["pcidss", "iso27001"], }); })(StatefulSet || (StatefulSet = {})); exports.StatefulSet = StatefulSet;