Integrar a validação de IaC com o GitHub Actions

Você pode usar a ação Analyze Code Security para validar a infraestrutura como código (IaC) que faz parte do fluxo de trabalho do GitHub Actions. A validação da IaC permite determinar se as definições de recursos do Terraform violam as políticas da organização e os detectores da Análise de integridade da segurança aplicados aos seus Google Cloud recursos.

Para mais informações sobre a validação da IaC, consulte Validar sua IaC em relação às Google Cloud políticas da sua organização.

Antes de começar

Conclua estas tarefas para começar a usar a validação da IaC com o GitHub Actions.

Ativar o nível Security Command Center Premium ou Enterprise

Verifique se o nível Security Command Center Premium ou Enterprise está ativado no nível da organização.

Ativar o Security Command Center ativa as APIs securityposture.googleapis.com e securitycentermanagement.googleapis.com.

Criar uma conta de serviço

Crie uma conta de serviço que possa ser usada para a ação Analyze Code Security.

    Verifique se você tem o papel do IAM de criador de contas de serviço (roles/iam.serviceAccountCreator) e o papel de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). Saiba como conceder papéis.
  1. No Google Cloud console, acesse a página Criar conta de serviço.

    Acesse "Criar conta de serviço"
  2. Selecione o projeto.
  3. No campo Nome da conta de serviço, insira um nome. O Google Cloud console preenche o campo ID da conta de serviço com base nesse nome.

    No campo Descrição da conta de serviço, insira uma descrição. Por exemplo, Service account for quickstart.

  4. Clique em Criar e continuar.
  5. Conceda o papel Validador de mudança de postura de segurança à esquerda à conta de serviço.

    Para conceder o papel, encontre a lista Selecionar um papel e selecione Validador de mudança de postura de segurança à esquerda.

  6. Clique em Continuar.
  7. Clique em Concluído para terminar a criação da conta de serviço.

Para mais informações sobre permissões de validação da IaC, consulte IAM para ativações no nível da organização.

Configurar a autenticação

  1. Configure a federação de identidade da carga de trabalho com seu provedor de identidade do GitHub. Para instruções, consulte Federação de identidade da carga de trabalho.

  2. Receba o URL do token de ID da federação de identidade da carga de trabalho. Por exemplo, https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID.

    Considere o seguinte:

    • PROJECT_NUMBER é o número do projeto em que você configurou a federação de identidade da carga de trabalho.Google Cloud
    • POOL_ID é o nome do pool.
    • PROVIDER_ID é o nome do provedor de identidade.
  3. Adicione a ação Authenticate to Google Cloud action ao fluxo de trabalho para autenticar a ação de validação da IaC.

Definir suas políticas

Defina as políticas da organização e os detectores da Análise de integridade da segurança. Para definir essas políticas usando uma postura de segurança, conclua as tarefas em Criar e implantar uma postura.

Criar o arquivo JSON do plano do Terraform

  1. Crie seu código do Terraform. Para instruções, consulte Criar seu código do Terraform.

  2. No GitHub Actions, inicialize o Terraform. Por exemplo, se você estiver usando a ação HashiCorp - Setup Terraform, execute o seguinte comando:

    - name: Terraform Init
      id: init
      run: terraform init
    
  3. Crie um arquivo de plano do Terraform:

    - name: Create Terraform Plan
      id: plan
      run: terraform plan -out=TF_PLAN_FILE
    

    Substitua TF_PLAN_FILE pelo nome do arquivo de plano do Terraform. Por exemplo, myplan.tfplan.

  4. Converta o arquivo de plano para o formato JSON:

    - name: Convert Terraform Plan to JSON
      id: convert
      run: terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
    

    Substitua TF_PLAN_JSON_FILE pelo nome do arquivo de plano do Terraform, no formato JSON. Por exemplo, mytfplan.json.

Adicionar a ação ao fluxo de trabalho do GitHub Actions

  1. No repositório do GitHub, navegue até o fluxo de trabalho.
  2. Abra o editor de fluxo de trabalho.
  3. Na barra lateral do GitHub Marketplace, pesquise Analyze Code Security.
  4. Na seção Instalação, copie a sintaxe.
  5. Cole a sintaxe como uma nova etapa no fluxo de trabalho.
  6. Substitua os seguintes valores:

    • workload_identity_provider pelo link para o URL do token de ID da federação de identidade da carga de trabalho.
    • service_account pelo endereço de e-mail da conta de serviço que você criou para a ação.
    • organization_id pelo ID da Google Cloud organização.
    • scan_file_ref pelo caminho para o arquivo de plano do Terraform, no formato JSON.
    • failure_criteria pelos critérios de limite de falha que determinam quando a ação falha. Os critérios de limite se baseiam no número de problemas de gravidade crítica, alta, média e baixa encontrados pela verificação de validação da IaC. failure_criteria especifica quantos problemas de cada gravidade são permitidos e como eles são agregados (AND ou OR). Por exemplo, se você quiser que a ação falhe se ela encontrar um problema crítico ou um problema de alta gravidade, defina failure_criteria como Critical:1,High:1,Operator:OR. O padrão é Critical:1,High:1,Medium:1,Low:1,Operator:OR, o que significa que, se a verificação de validação da IaC encontrar qualquer problema, a ação vai falhar.

Agora você pode executar o fluxo de trabalho para validar o arquivo de plano do Terraform. Para executar o fluxo de trabalho manualmente, consulte Executar um fluxo de trabalho manualmente.

Conferir o relatório de violação da IaC

  1. No repositório do GitHub, clique em Ações e selecione o fluxo de trabalho.

  2. Clique na execução mais recente do fluxo de trabalho.

    Na seção Artefatos, o relatório de violação (ias-scan-sarif.json) está disponível em um arquivo ZIP. O relatório inclui os seguintes campos:

    • Um campo rules que descreve quais políticas foram violadas pelo plano do Terraform. Cada regra inclui um ruleID que pode ser correspondido aos resultados incluídos no relatório.
    • Um campo results que descreve as modificações de recursos propostas que violam uma regra específica.
  3. Resolva as violações no código do Terraform antes de aplicá-lo.

A seguir