Integra la validación de IaC con Acciones de GitHub
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Puedes usar la acción Analyze Code Security para validar la infraestructura como código (IaC) que forma parte de tu flujo de trabajo de GitHub Actions. La validación de IaC te permite determinar si las definiciones de recursos de Terraform incumplen las políticas de la organización existentes y los detectores de Security Health Analytics que se aplican a tus recursos de Google Cloud .
Obtén la URL de tu token de ID de federación de identidades para cargas de trabajo. Por ejemplo, https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID.
Ten en cuenta lo siguiente:
PROJECT_NUMBER es el número del proyectoGoogle Cloud en el que configuraste la federación de Workload Identity.
POOL_ID es el nombre del grupo.
PROVIDER_ID es el nombre de tu proveedor de identidad.
- name: Create Terraform Plan
id: plan
run: terraform plan -out=TF_PLAN_FILE
Reemplaza TF_PLAN_FILE por el nombre del archivo del plan de Terraform. Por ejemplo, myplan.tfplan
Convierte tu archivo de plan al formato JSON:
- name: Convert Terraform Plan to JSON
id: convert
run: terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
Reemplaza TF_PLAN_JSON_FILE por el nombre del archivo del plan de Terraform, en formato JSON. Por ejemplo, mytfplan.json
Agrega la acción a tu flujo de trabajo de GitHub Actions
En el repositorio de GitHub, navega hasta tu flujo de trabajo.
Abre el editor de flujos de trabajo.
En la barra lateral de GitHub Marketplace, busca Analyze Code Security.
En la sección Instalación, copia la sintaxis.
Pega la sintaxis como un paso nuevo en tu flujo de trabajo.
Reemplaza los siguientes valores:
workload_identity_provider con el vínculo a la URL de tu token de ID de la federación de identidades para cargas de trabajo.
service_account por la dirección de correo electrónico de la cuenta de servicio que creaste para la acción.
organization_id por el Google Cloud ID de tu organización.
scan_file_ref con la ruta de acceso a tu archivo de plan de Terraform, en formato JSON.
failure_criteria con los criterios del umbral de falla que determinan cuándo falla la acción. Los criterios de umbral se basan en la cantidad de problemas de gravedad crítica, alta, media y baja que encuentra el análisis de validación de IaC. failure_criteria especifica cuántos problemas de cada gravedad se permiten y cómo se agregan los problemas (AND o OR). Por ejemplo, si deseas que la acción falle si encuentra un problema crítico o un problema de gravedad alta, establece failure_criteria en Critical:1,High:1,Operator:OR. El valor predeterminado es Critical:1,High:1,Medium:1,Low:1,Operator:OR, lo que significa que, si el análisis de validación de IaC encuentra algún problema, la acción debe fallar.
Ahora puedes ejecutar el flujo de trabajo para validar tu archivo de plan de Terraform. Para ejecutar el flujo de trabajo de forma manual, consulta Cómo ejecutar un flujo de trabajo de forma manual.
Consulta el informe de incumplimientos de IaC
En tu repositorio de GitHub, haz clic en Actions y selecciona tu flujo de trabajo.
Haz clic en la ejecución más reciente de tu flujo de trabajo.
En la sección Artifacts, el informe de incumplimiento (ias-scan-sarif.json) está disponible en un archivo ZIP. El informe incluye los siguientes campos:
Un campo rules que describe qué políticas incumplió el plan de Terraform. Cada regla incluye un ruleID que puedes comparar con los resultados incluidos en el informe.
Es un campo results que describe las modificaciones propuestas del recurso que incumplen una regla específica.
Resuelve los incumplimientos en tu código de Terraform antes de aplicarlo.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-05 (UTC)"],[],[],null,["| Premium and Enterprise [service tiers](/security-command-center/docs/service-tiers) (requires [organization-level activation](/security-command-center/docs/activate-scc-overview#overview_of_organization-level_activation))\n\nYou can use the [Analyze Code Security\naction](https://github.com/marketplace/actions/analyze-code-security) to\nvalidate the infrastructure as code (IaC) that is part of your GitHub Actions\nworkflow. Validating IaC lets you determine whether your Terraform resource\ndefinitions violate the existing organization policies and\nSecurity Health Analytics detectors that are applied to your Google Cloud resources.\n\nFor more information about IaC validation, see\n[Validate your IaC against your Google Cloud organization's policies](/security-command-center/docs/validate-iac).\n\nBefore you begin\n\nComplete these tasks to get started with IaC validation with GitHub Actions.\n\nActivate the Security Command Center Premium tier or Enterprise tier\n\nVerify that the\n[Security Command Center Premium tier or Enterprise tier](/security-command-center/docs/activate-scc-overview)\nis activated at the organization level.\n\nActivating Security Command Center enables the `securityposture.googleapis.com` and\n`securitycentermanagement.googleapis.com` APIs.\n\nCreate a service account\n\nCreate a service account that you can use for the Analyze Code Security\naction.\n\n1.\n In the Google Cloud console, go to the **Create service account** page.\n\n [Go to Create service account](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts/create?supportedpurview=project)\n2. Select your project.\n3.\n In the **Service account name** field, enter a name. The Google Cloud console fills\n in the **Service account ID** field based on this name.\n\n\n In the **Service account description** field, enter a description. For example,\n `Service account for quickstart`.\n4. Click **Create and continue**.\n5.\n Grant the **Security Posture Shift-Left Validator** role to the service account.\n\n\n To grant the role, find the **Select a role** list, then select\n **Security Posture Shift-Left Validator**.\n | **Note** : The **Role** field affects which resources the service account can access in your project. You can revoke these roles or grant additional roles later.\n6. Click **Continue**.\n7.\n Click **Done** to finish creating the service account.\n\n\u003cbr /\u003e\n\nFor more information about IaC validation permissions, see\n[IAM for organization-level activations](/security-command-center/docs/access-control-org).\n\nSet up authentication\n\n1. Configure Workload Identity Federation with your GitHub identity provider. For\n instructions, see\n [Workload Identity Federation](/iam/docs/workload-identity-federation).\n\n2. Obtain the URL for your Workload Identity Federation ID token. For example,\n `https://iam.googleapis.com/projects/`\u003cvar translate=\"no\"\u003ePROJECT_NUMBER\u003c/var\u003e`/locations/global/workloadIdentityPools/`\u003cvar translate=\"no\"\u003ePOOL_ID\u003c/var\u003e`/providers/`\u003cvar translate=\"no\"\u003ePROVIDER_ID\u003c/var\u003e.\n\n Consider the following:\n - \u003cvar translate=\"no\"\u003ePROJECT_NUMBER\u003c/var\u003e is the project number for the Google Cloud project that you set up Workload Identity Federation in.\n - \u003cvar translate=\"no\"\u003ePOOL_ID\u003c/var\u003e is the pool name.\n - \u003cvar translate=\"no\"\u003ePROVIDER_ID\u003c/var\u003e is the name of your identity provider.\n3. Add the [Authenticate to Google Cloud\n action](https://github.com/marketplace/actions/authenticate-to-google-cloud)\n to your workflow to authenticate the IaC validation action.\n\nDefine your policies\n\nDefine your\n[organization policies](/resource-manager/docs/organization-policy/creating-managing-policies)\nand\n[Security Health Analytics detectors](/security-command-center/docs/concepts-security-health-analytics).\nTo define these policies using a security posture, complete the tasks in\n[Create and deploy a posture](/security-command-center/docs/how-to-use-security-posture#create_and_deploy_a_posture).\n\nCreate your Terraform plan JSON file\n\n1. Create your Terraform code. For instructions, see [Create your Terraform\n code](/security-command-center/docs/validate-iac#create_your_terraform_code).\n\n2. In your GitHub Actions, initialize Terraform. For example, if you're using\n the [HashiCorp - Setup Terraform action](https://github.com/marketplace/actions/hashicorp-setup-terraform), run the following command:\n\n - name: Terraform Init\n id: init\n run: terraform init\n\n3. Create a Terraform plan file:\n\n - name: Create Terraform Plan\n id: plan\n run: terraform plan -out=\u003cvar translate=\"no\"\u003eTF_PLAN_FILE\u003c/var\u003e\n\n Replace \u003cvar translate=\"no\"\u003eTF_PLAN_FILE\u003c/var\u003e with the name for the Terraform plan\n file. For example, `myplan.tfplan`.\n4. Convert your plan file into JSON format:\n\n - name: Convert Terraform Plan to JSON\n id: convert\n run: terraform show -no-color -json \u003cvar translate=\"no\"\u003eTF_PLAN_FILE\u003c/var\u003e \u003e \u003cvar translate=\"no\"\u003eTF_PLAN_JSON_FILE\u003c/var\u003e\n\n Replace \u003cvar translate=\"no\"\u003eTF_PLAN_JSON_FILE\u003c/var\u003e with the name for the Terraform\n plan file, in JSON format. For example, `mytfplan.json`.\n\nAdd the action to your GitHub Actions workflow\n\n1. In the GitHub repository, browse to your workflow.\n2. Open the workflow editor.\n3. In the GitHub Marketplace sidebar, search for **Analyze Code Security**.\n4. In the **Installation** section, copy the syntax.\n5. Paste the syntax as a new step into your workflow.\n6. Replace the following values:\n\n - `workload_identity_provider` with the link to the URL for your Workload Identity Federation ID token.\n - `service_account` with the email address of the service account that you created for the action.\n - `organization_id` with your Google Cloud organization ID.\n - `scan_file_ref` with the path to your Terraform plan file, in JSON format.\n - `failure_criteria` with the failure threshold criteria that determines when the action fails. The threshold criteria is based on the number of critical, high, medium, and low severity issues that the IaC validation scan encounters. `failure_criteria` specifies how many issues of each severity are permitted and how the issues are aggregated (either `AND` or `OR`). For example, if you want the action to fail if it encounters one critical issue *or* one high severity issue, set the `failure_criteria` to `Critical:1,High:1,Operator:OR`. The default is `Critical:1,High:1,Medium:1,Low:1,Operator:OR`, which means that if the IaC validation scan encounters any issue, the action must fail.\n\nYou can now run the workflow to validate your Terraform plan file. To run the\nworkflow manually, see [Manually running a\nworkflow](https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow).\n\nView the IaC violation report\n\n1. In your GitHub repository, click **Actions** and select your workflow.\n\n2. Click the most recent run for your workflow.\n\n In the **Artifacts** section, the violation report (`ias-scan-sarif.json`) is available in a zip file. The report includes the\n following fields:\n - A `rules` field that describes which policies were violated by the Terraform plan. Each rule includes a `ruleID` that you can match with the results that are included in the report.\n - A `results` field that describes the proposed asset modifications that violate a specific rule.\n3. Resolve any violations within your Terraform code before applying it.\n\nWhat's next\n\n- View the [analyze-code-security-scc action\n source code](https://github.com/google-github-actions/analyze-code-security-scc/) in GitHub."]]