Proteja dados sensíveis usando o Secret Manager com o Batch

Neste documento, descrevemos como proteger os dados confidenciais que você quer especificar para um job do Batch usando secrets do Secret Manager.

Os secrets do Secret Manager protegem os dados sensíveis com criptografia. Em um job do Batch, é possível especificar um ou mais secrets existentes para transmitir com segurança os dados confidenciais que eles contêm. Use-os para fazer o seguinte:

Antes de começar

Transmitir dados confidenciais com segurança para variáveis de ambiente personalizadas

Para transmitir dados confidenciais de secrets do Secret Manager para variáveis de ambiente personalizadas, defina cada variável de ambiente com segurança no subcampo de variáveis de secret (secretVariables) de um ambiente e especifique um secret para cada valor. Sempre que você especificar um secret em um job, formate-o como um caminho para uma versão do secret: projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.

É possível criar um job que defina variáveis de secret usando a CLI gcloud ou a API Batch. O exemplo a seguir explica como criar um job que defina e use uma variável de secret para o ambiente de todos os executáveis (subcampo environment de taskSpec).

gcloud

  1. Crie um arquivo JSON que especifique os detalhes de configuração do job e inclua o subcampo secretVariables para um ou mais ambientes.

    Por exemplo, para criar um job de script básico que use uma variável de chave secreta no ambiente para todos os executáveis, crie um arquivo JSON com o seguinte conteúdo:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo This is the secret: ${SECRET_VARIABLE_NAME}"
                }
              }
            ],
            "environment": {
              "secretVariables": {
                "{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION"
              }
            }
          }
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Substitua:

    • SECRET_VARIABLE_NAME: o nome da variável secreta. Por convenção, os nomes das variável de ambiente são em maiúsculas.

      Para acessar com segurança os dados sensíveis da chave secreta do Secret Manager da variável, especifique o nome da variável nos executáveis deste job. A variável de chave secreta pode ser acessada por todos os executáveis que estão no mesmo ambiente em que você define a variável de secret.

    • PROJECT_ID: o ID do projeto.

    • SECRET_NAME: o nome de um secret atual do Secret Manager.

    • VERSION: a versão do secret especificado que contém os dados que você quer transmitir para o job. Pode ser o número da versão ou latest.

  2. Para criar e executar o job, use o comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Substitua:

    • JOB_NAME: o nome do job.

    • LOCATION: o local do job.

    • JSON_CONFIGURATION_FILE: o caminho de um arquivo JSON com os detalhes de configuração do job.

API

Faça uma solicitação POST para o método jobs.create que especifica o subcampo secretVariables para um ou mais ambientes.

Por exemplo, para criar um job de script básico que usa uma variável de chave secreta no ambiente para todos os executáveis, faça a seguinte solicitação:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo This is the secret: ${SECRET_VARIABLE_NAME}"
            }
          }
        ],
        "environment": {
          "secretVariables": {
            "{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION"
          }
        }
      }
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto.

  • LOCATION: o local do job.

  • JOB_NAME: o nome do job.

  • SECRET_VARIABLE_NAME: o nome da variável secreta. Por convenção, os nomes das variável de ambiente são em maiúsculas.

    Para acessar com segurança os dados sensíveis da chave secreta do Secret Manager da variável, especifique o nome da variável nos executáveis deste job. A variável de chave secreta pode ser acessada por todos os executáveis que estão no mesmo ambiente em que você define a variável de secret.

  • SECRET_NAME: o nome de um secret atual do Secret Manager.

  • VERSION: a versão do secret especificado que contém os dados que você quer transmitir para o job. Pode ser o número da versão ou latest.

Acesse com segurança imagens de contêiner que exigem credenciais de registro do Docker

Para usar uma imagem de contêiner de um registro particular do Docker, um executável precisa especificar as credenciais de login que permitem acessar esse registro do Docker. Especificamente, para qualquer contêiner executável com o campo URI de imagem (imageUri) definido como uma imagem de um registro particular do Docker, especifique as credenciais necessárias para acessar esse registro do Docker usando os campos nome de usuário (username) e senha (password).

É possível proteger todas as credenciais confidenciais de um registro do Docker especificando secrets existentes que contenham as informações, em vez de definir esses campos diretamente. Sempre que você especificar um secret em um job, formate-o como um caminho para uma versão do secret: projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.

É possível criar um job que use imagens de contêiner de um registro particular do Docker usando a CLI gcloud ou a API Batch. No exemplo a seguir, explicamos como criar um job que usa uma imagem de contêiner de um registro particular do Docker especificando o nome de usuário e a senha como um secret diretamente.

gcloud

  1. Crie um arquivo JSON que especifique os detalhes de configuração do job. Para qualquer executável de contêiner que use imagens de um registro particular do Docker, inclua as credenciais necessárias para acessá-lo nos campos username e password.

    Por exemplo, para criar um job de contêiner básico que especifique uma imagem de um registro particular do Docker, crie um arquivo JSON com o seguinte conteúdo:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "container": {
                  "imageUri": "PRIVATE_IMAGE_URI",
                  "commands": [
                    "-c",
                    "echo This runnable uses a private image."
                  ],
                  "username": "USERNAME",
                  "password": "PASSWORD"
                }
              }
            ],
          }
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Substitua:

    • PRIVATE_IMAGE_URI: o URI de uma imagem de contêiner de um registro particular do Docker. Se essa imagem exigir outras configurações de contêiner, inclua-as também.

    • USERNAME: o nome de usuário do registro particular do Docker, que pode ser especificado como um secret ou diretamente.

    • PASSWORD: a senha do registro particular do Docker, que pode ser especificada como um secret (recomendado) ou diretamente.

      Por exemplo, para especificar a senha como um secret, defina PASSWORD como o seguinte:

      projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
      

      Substitua:

  2. Para criar e executar o job, use o comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Substitua:

    • JOB_NAME: o nome do job.

    • LOCATION: o local do job.

    • JSON_CONFIGURATION_FILE: o caminho de um arquivo JSON com os detalhes de configuração do job.

API

Faça uma solicitação POST ao método jobs.create. Para qualquer executável de contêiner que use imagens de um registro particular do Docker, inclua as credenciais necessárias para acessá-lo nos campos username e password.

Por exemplo, para criar um job de contêiner básico que especifique uma imagem de um registro particular do Docker, faça a seguinte solicitação:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "container": {
              "imageUri": "PRIVATE_IMAGE_URI",
                "commands": [
                  "-c",
                  "echo This runnable uses a private image."
                ],
                "username": "USERNAME",
                "password": "PASSWORD"
            }
          }
        ],
      }
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto.

  • LOCATION: o local do job.

  • JOB_NAME: o nome do job.

  • PRIVATE_IMAGE_URI: o URI de uma imagem de contêiner de um registro particular do Docker. Se essa imagem exigir outras configurações de contêiner, inclua-as também.

  • USERNAME: o nome de usuário do registro particular do Docker, que pode ser especificado como um secret ou diretamente.

  • PASSWORD: a senha do registro particular do Docker, que pode ser especificada como um secret (recomendado) ou diretamente.

    Por exemplo, para especificar a senha como um secret, defina PASSWORD como o seguinte:

    projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
    

    Substitua:

A seguir