Archivo YAML de postura de seguridad

En esta página, se proporciona una descripción general de los pares clave-valor en el archivo posture.yaml que creas para definir las políticas de tu postura de seguridad. Para crear un archivo YAML de postura y, luego, implementarlo en tu entorno, consulta Administra una postura de seguridad.

Estructura del archivo YAML de la postura

Las posiciones son archivos YAML que tienen la siguiente estructura:

name: posture_name
state: posture_state
description: posture_description
policy_sets:
- policy_set_id: policy_set_ID
  - description: policy_set_description
  policies:
  - policy_id: policy_id
    compliance_standards:
      - standard: policy_standards
      - control: policy_control
          - description: policy_description
    # Definition for a organization policy
    constraint:
      org_policy_constraint:
        canned_constraint_id: constraint_ID
        policy_rules:
          - org_policy_kind: org_policy_kind_value
          - condition:
              expression: org_policy_expression
              title: org_policy_title
              description: org_policy_description
              location: org_policy_location
    # Definition for a custom organization policy constraint
    constraint:
      org_policy_constraint_custom:
        custom_constraint:
          name: custom_org_constraint_name
          resource_types: custom_org_resource_type
          method_types: custom_org_method_type
          condition: custom_org_condition
          action_type: custom_org_action_type
          display_name: custom_org_constraint_display_name
          description: custom_org_constraint_description
        policy_rules:
          - org_policy_kind: org_policy_kind_value
          - condition:
              expression: org_policy_expression
              title: org_policy_title
              description: org_policy_description
              location: org_policy_location
      # Definition for a Security Health Analytics detector
      constraint:
        security_health_analytics_module:
            module_name: sha_detector_name
            module_enablement_state: sha_detector_enabled
      # Definition for a custom Security Health Analytics detector
      constraint:
        security_health_analytics_custom_module:
            display_name: sha_custom_detector_name
            config:
                predicate:
                    expression: sha_custom_detector_expression
                    title: sha_custom_detector_predicate_title
                    description: sha_custom_detector_predicate_description
                    location: sha_custom_detector_predicate_location
                - custom_output:
                    - property:
                        name: sha_custom_detector_output_name
                        value_expression:
                            expression: sha_custom_detector_output_expression
                            title: sha_custom_detector_output_title
                            description: sha_custom_detector_output_description
                            location: sha_custom_detector_output_location
                resource_selector:
                    - resource_types: sha_custom_detector_resource
            severity: sha_custom_severity_level
              description: sha_custom_detector_description
              recommendation: sha_custom_detector_recommendation
            module_enablement_state: sha_detector_enabled

Descripción de los pares clave-valor

En la siguiente tabla, se proporciona una descripción de los pares clave-valor del archivo posture.yaml.

Par clave-valor Descripción
name: posture_name El nombre de la postura, que debe comenzar con una letra. Este valor es opcional porque especificas el nombre de la posición cuando ejecutas el comando gcloud scc postures create.
state: posture_state Un ENUM que puedes configurar como ACTIVE, DRAFT o DEPRECATED Para obtener más información sobre los estados de posición, consulta Cómo cambiar el estado de una posición.
description: posture_description Es una descripción de la política. Este valor es opcional.
policy_set_id: policy_set_ID Un identificador único para el conjunto de políticas dentro del archivo de posición. Un archivo de postura puede incluir varios conjuntos de políticas.
description: policy_set_description Una descripción del conjunto de políticas. Este valor es opcional.
policy_id: policy_id Un identificador único para la política dentro del conjunto de políticas. Un conjunto de políticas puede incluir varias políticas.
standard: policy_compliance_standard El nombre del estándar de cumplimiento que admite esta política.
control: policy_compliance_control Los controles específicos dentro del estándar de cumplimiento que admite esta política.
description: policy_compliance_description Una descripción del estándar de cumplimiento que admite esta política.
canned_constraint_id: constraint_ID El nombre de la restricción de la política de la organización. Por ejemplo, cloudbuild.allowedWorkerPools. No incluyas el prefijo constraints/ en constraint_ID.
org_policy_kind Los valores de las políticas de la organización de la lista son allow_all, deny_all, allowed_values, denied_values. El valor de las políticas de la organización booleanas es enforce.
org_policy_kind_value Los valores de los tipos allow_all, deny_all y enforce son true o false. El valor de las categorías allowed_values y denied_values es una lista de valores permitidos o denegados, respectivamente.
condition: Una condición que determina si esta regla se usa en la evaluación de la política. Cuando se establece, el campo expression de Expr debe incluir de 1 a 10 subexpresiones, unidas por los operadores || o && . Cada subexpresión debe tener el formato resource.matchTag('ORG_ID/tag_key_short_name, 'tag_value_short_name') o resource.matchTagId('tagKeys/key_id', 'tagValues/value_id'), en el que key_name y value_name son los nombres de recursos para claves y valores de etiquetas. Estos nombres están disponibles en el servicio de Tag Manager. Una expresión de ejemplo es: resource.matchTag('123456789/environment, 'prod') o resource.matchTagId('tagKeys/123', 'tagValues/456').
expression: org_policy_expression La representación textual de una expresión en la sintaxis de Common Expression Language. Este valor es opcional.
title: org_policy_title La descripción del propósito de la expresión. Este valor es opcional.
description: org_policy_description Es la descripción de la expresión. Este valor es opcional.
location: org_policy_location Una cadena que indica la ubicación de la expresión para informar errores. Por ejemplo, un nombre de archivo y una posición en el archivo. Este valor es opcional.
name: custom_org_constraint_name El nombre de la restricción personalizada, en el formato organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME. Por ejemplo, organizations/3589215982/customConstraints/custom.disableGkeAutoUpgrade El CONSTRAINT_NAME no puede tener más de 62 caracteres. No se cuenta el prefijo organizations/{organization_id}/customConstraints/custom. Cuando se define una restricción personalizada en el archivo de posición, se crea una nueva.
resource_types: custom_org_resource_type El nombre completamente calificado del recurso de REST de Google Cloud que contiene el objeto y el campo que deseas restringir. Existe un máximo de 20 restricciones personalizadas por tipo de recurso.
method_types: custom_org_method_type Es la lista de métodos RESTful para aplicar la restricción.
condition: custom_org_condition La condición de CEL que hace referencia al recurso de servicio compatible. La longitud máxima de este campo es 1000 caracteres.
action_type: custom_org_action_type La acción que se realiza si se cumple la condición.
display_name: custom_org_constraint_display_name Es un nombre sencillo para la restricción. La longitud máxima de este campo es 200 caracteres.
description: custom_org_constraint_description Es la descripción de la restricción que se muestra como un mensaje de error cuando se infringe la política. La longitud máxima de este campo es 2000 caracteres.
module_name: sha_detector_name Es el nombre de un detector de Security Health Analytics. Por ejemplo, BIGQUERY_TABLE_CMEK_DISABLED.
module_enablement_state: sha_detector_enabled Si el detector de Security Health Analytics está habilitado. ENABLED o DISABLED
display_name: sha_custom_detector_name Es el nombre del módulo personalizado para Security Health Analytics. El nombre debe tener entre 1 y 128 caracteres, comenzar con una letra minúscula y contener solo caracteres alfanuméricos o guiones bajos.
expression: sha_custom_detector_expression Las expresiones en CEL que verifican las propiedades de los tipos de recursos que se analizarán.
title: sha_custom_detector_predicate_title Es el nombre de la propiedad de predicado del módulo personalizado de Security Health Analytics.
description: sha_custom_detector_predicate_description Es la descripción de la propiedad de predicado para el módulo personalizado de Security Health Analytics.
location: sha_custom_detector_predicate_location La ubicación a la que se aplica la propiedad del predicado.
name: sha_custom_detector_output_name Es el nombre de la propiedad custom_output.
expression: sha_custom_detector_output_expression La expresión que se mostrará en el resultado.
title: sha_custom_detector_output_title Es el título del resultado.
description: sha_custom_detector_output_description Es la descripción del resultado del módulo personalizado para Security Health Analytics.
location: sha_custom_detector_output_location La ubicación a la que se aplica el resultado.
resource_types: sha_custom_detector_resource Los tipos de recursos que analiza el módulo personalizado.
severity: sha_custom_severity_level La gravedad de los resultados que se crean en este módulo.
description: sha_custom_detector_description La vulnerabilidad o la configuración incorrecta que detecta el módulo personalizado.
recommendation: sha_custom_detector_recommendation Una descripción de cómo solucionar el problema detectado.

Ejemplo de position.yaml

createTime: '2024-04-01T15:27:27.188366349Z'
etag: h5ulCqzUqOcaIjKjxHFrOrrZpmneG8A0K1mdO-uHsLM
name: organizations/123/locations/global/postures/mixedcasposture
policySets:
- policies:
  - constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: BIGQUERY_TABLE_CMEK_DISABLED
    description: enable BIGQUERY_TABLE_CMEK_DISABLED
    policyId: SHA module BIGQUERY_TABLE_CMEK_DISABLED
  - constraint:
      orgPolicyConstraint:
        cannedConstraintId: iam.allowServiceAccountCredentialLifetimeExtension
        policyRules:
        - allowAll: true
        - condition:
            expression: resource.matchTag("123/location", "us-east3")
            title: policy for us-east3
            description: apply policy to us-east3
    policyId: test/123/policies/iam.allowServiceAccountCredentialLifetimeExtension
  - constraint:
      orgPolicyConstraintCustom:
        customConstraint:
          actionType: ALLOW
          condition: resource.management.autoUpgrade == false
          description: Only allow GKE NodePool resource to be created or updated if
            AutoUpgrade is not enabled where this custom constraint is enforced.
          displayName: Disable GKE auto upgrade
          methodTypes:
          - CREATE
          name: organizations/123/customConstraints/custom.gke123
          resourceTypes:
          - container.googleapis.com/NodePool
        policyRules:
        - enforce: true
    policyId: orgPolicycustomconstraint
  - constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: DISABLED
        moduleName: PUBLIC_BUCKET_ACL
    description: PUBLIC_BUCKET_ACL disabled
    policyId: sha module PUBLIC_BUCKET_ACL
  - constraint:
      securityHealthAnalyticsCustomModule:
        config:
          customOutput: {}
          description: Test Custom Module
          predicate:
            expression: resource.rotationPeriod > duration('2592000s')
          recommendation: Testing custom modules
          resourceSelector:
            resourceTypes:
            - cloudkms.googleapis.com/CryptoKey
          severity: CRITICAL
        displayName: customSHA
        moduleEnablementState: ENABLED
    policyId: sha_custom_module
  - constraint:
      securityHealthAnalyticsCustomModule:
        config:
          customOutput: {}
          description: Test Custom Module
          predicate:
            expression: resource.rotationPeriod > duration('2592000s')
          recommendation: Testing custom modules
          resourceSelector:
            resourceTypes:
            - cloudkms.googleapis.com/CryptoKey
          severity: CRITICAL
        displayName: customSHA2
        moduleEnablementState: ENABLED
    policyId: sha_custom_module_2
  policySetId: PolicySetmix
- policy_set_id: BigQuery detective policy set
  description: SHA module that new customers can automatically enable.
  policies:
  - policy_id: Public dataset
    constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: PUBLIC_DATASET
state: ACTIVE

Ejemplos

Para ver ejemplos, consulta las plantillas de posiciones predefinidas.

El siguiente es un archivo de postura que incluye detectores de Security Health Analytics para AWS y Google Cloud:

description: Posture to help make storage workloads more secure across Google Cloud and AWS.
state: ACTIVE
policy_sets:
- policy_set_id: Google Cloud policy set
  description: Policy set containing organization policies and Security Health Analytics modules for securing Cloud Storage.
  policies:
  - policy_id: Enforce Public Access Prevention
    compliance_standards:
    - standard: NIST SP 800-53
      control: AC-3
    - standard: NIST SP 800-53
      control: AC-17
    - standard: NIST SP 800-53
      control: AC-20
    constraint:
      org_policy_constraint:
        canned_constraint_id: storage.publicAccessPrevention
        policy_rules:
        - enforce: true
    description: This policy prevents access to existing and future resources via the public internet by disabling and blocking access control lists (ACLs) and IAM permissions that grant access to allUsers and allAuthenticatedUsers.
  - policy_id: Bucket IAM not monitored
    compliance_standards:
    - standard: NIST 800-53 R5
      control: AC-12
    - standard: NIST 800-53 R5
      control: AC-2
    - standard: NIST 800-53 R5
      control: AC-7
    constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: BUCKET_IAM_NOT_MONITORED
    description: This detector logs metric filter and creates alerts for Cloud Storage IAM permission changes. By monitoring changes to Cloud Storage bucket permissions, this detector can help you identify over-privileged users or suspicious activity at early stages.

- policy_set_id: AWS policy set
  description:  Policy set containing AWS built-in Security Health Analytics modules for securing S3 buckets.
  policies:
  - policy_id: S3 bucket replication enabled
    compliance_standards:
    - standard: NIST 800-53 R5
      control: SI-13(5)
    constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: S3_BUCKET_REPLICATION_ENABLED
    description: This control checks whether an Amazon S3 bucket has cross-region replication enabled. The control fails if the bucket doesn't have cross-region replication enabled or if same-region replication is also enabled.

  - policy_id: S3 bucket logging enabled
    compliance_standards:
    - standard: NIST 800-53 R5
      control: SI-13(5)
    - standard: PCI DSS 3.2.1
      control: 10.3.1
    constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: S3_BUCKET_LOGGING_ENABLED
    description: AWS S3 Server Access Logging feature records access requests to storage buckets which is useful for security audits. By default, server access logging is not enabled for S3 buckets.

¿Qué sigue?