Criar programações de rotação

O Secret Manager permite programar rotações periódicas dos seus secrets. O Secret Manager faz isso enviando notificações para tópicos do Pub/Sub associados aos seus secrets com base na frequência e no tempo de rotação especificados. Esta página descreve como configurar essas programações de rotação.

Como as notificações de rotação de segredos funcionam

O Secret Manager aciona uma mensagem SECRET_ROTATE para os tópicos do Pub/Sub designados no next_rotation_time do secret. Há duas maneiras de determinar esse carimbo de data/hora:

  1. Definido pelo usuário: é possível especificar o next_rotation_time ao criar ou atualizar o secret.

  2. Período de rotação: se você definir um rotation_period, o Secret Manager vai calcular automaticamente o next_rotation_time. O Secret Manager envia a mensagem SECRET_ROTATE depois que o rotation_period especificado decorrido e atualiza o next_rotation_time para programar a próxima rotação.

Você precisa configurar um assinante do Pub/Sub para receber e agir com base nas mensagens SECRET_ROTATE. Talvez você também precise configurar outros fluxos de trabalho em resposta a essas notificações, como criar uma nova versão do secret e implantar as mudanças nos seus aplicativos.

Requisitos e considerações para programações de rotação de segredos

  • Os tópicos do Pub/Sub precisam ser configurados no secret. Para saber como criar um tópico e uma assinatura do Pub/Sub, consulte o guia de início rápido do Pub/Sub. Para saber como configurar tópicos em um secret, consulte Notificações de eventos para o Secret Manager.

  • O next_rotation_time precisará ser definido se rotation_period for especificado.

  • next_rotation_time não pode ser definido para menos de cinco minutos no futuro.

  • A rotation_period não pode ter menos de uma hora de duração. Para conferir orientações de formatação de carimbo de data/hora, consulte a referência de data/hora do Google Cloud.

  • Embora o Secret Manager tente automaticamente o envio de mensagens com falha, não podemos garantir o envio se houver configurações incorretas relacionadas ao secret, à configuração do tópico, às permissões ou às cotas.

  • As rotações em andamento precisam ser concluídas antes da outra rotação para evitar que rotações simultâneas produzam comportamentos inesperados. As notificações são consideradas em trânsito enquanto o Secret Manager está tentando enviar a mensagem para o Pub/Sub. As rotações programadas serão ignoradas se houver uma rotação em andamento. O Secret Manager tenta repetir automaticamente as tentativas com falha de envio de uma mensagem por até sete dias. Depois desse período, a rotação é cancelada.

Configurar a rotação em um secret

É possível configurar uma programação de rotação usando o console do Google Cloud, a Google Cloud CLI ou a API Secret Manager.

Console

  1. Acesse a página do Secret Manager no console do Google Cloud:

    Acessar o Secret Manager

  2. Na página Secret Manager, clique na guia Regional secrets e em Criar secret regional.

  3. Na página Criar secret regional, insira um nome para o secret no campo Nome.

  4. Insira um valor para o secret (por exemplo, abcd1234). Também é possível fazer upload de um arquivo de texto com o valor do secret usando a opção Fazer upload do arquivo. Essa ação cria automaticamente a versão do secret.

  5. Escolha o local em que o secret regional vai ser armazenado na lista Região.

  6. Acesse a seção Rotação e marque a caixa de seleção Definir período de rotação.

  7. Na lista Período de rotação, selecione uma das opções padrão ou escolha Personalizado para configurar sua própria programação de rotação.

  8. No campo Iniciar em, insira a data e a hora de início do período de rotação.

  9. Clique em Criar secret.

gcloud

Antes de usar os dados do comando abaixo, faça estas substituições:

  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado.
  • LOCATION: o local do Google Cloud do segredo.
  • NEXT_ROTATION_TIME: o carimbo de data/hora em que a primeira rotação foi concluída no formato ISO 8601, por exemplo, 2021-06-01T09:00:00Z.
  • ROTATION_PERIOD: o intervalo, em segundos, para girar a chave. Por exemplo, para girar a chave a cada 2592000 segundos, defina um valor de 2592000s.
  • FULL_TOPIC_NAME: o nome completo do tópico do Pub/Sub no formato projects/your-project-id/topics/your-topic-name.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
  --next-rotation-time="NEXT_ROTATION_TIME" \
  --rotation-period="ROTATION_PERIOD" \
  --topics="FULL_TOPIC_NAME"

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
  --next-rotation-time="NEXT_ROTATION_TIME" `
  --rotation-period="ROTATION_PERIOD" `
  --topics="FULL_TOPIC_NAME"

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
  --next-rotation-time="NEXT_ROTATION_TIME" ^
  --rotation-period="ROTATION_PERIOD" ^
  --topics="FULL_TOPIC_NAME"

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: o local do Google Cloud do segredo
  • PROJECT_ID: o ID do projeto do Google Cloud
  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado
  • TOPIC_NAME: o nome do tópico

Método HTTP e URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID

Corpo JSON da solicitação:

{
  "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"},
  "rotation":
    {
      "next_rotation_time": "2021-06-01T09:00:00Z",
      "rotation_period" : '2592000s'
    },
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"1621434abc8dc4\"",
  "rotation": {
    "nextRotationTime": "2024-09-10T09:00:00Z",
    "rotationPeriod": "2592000s"
  }
}

Atualizar as configurações de rotação de um secret

É possível atualizar as seguintes configurações de rotação ao fazer uma solicitação de atualização:

  • rotation: refere-se a toda a configuração de rotação do secret.

  • rotation.next_rotation_time: é direcionado especificamente ao carimbo de data/hora que indica quando a próxima rotação pode ocorrer.

  • rotation.rotation_period: especifica a duração entre cada rotação.

Para atualizar as configurações de rotação do secret, use um dos seguintes métodos:

Console

  1. Acesse a página do Secret Manager no console do Google Cloud:

    Acessar o Secret Manager

  2. Na página Secret Manager, clique na guia Secrets regionais.

  3. Localize o segredo que você quer editar e clique no menu Ações associado a ele. No menu Ações, clique em Editar.

  4. Acesse a seção Rotação. Atualize o período de rotação conforme necessário e clique em Atualizar segredo.

gcloud

Antes de usar os dados do comando abaixo, faça estas substituições:

  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado.
  • LOCATION: o local do Google Cloud do segredo.
  • NEXT_ROTATION_TIME: o carimbo de data/hora em que a primeira rotação foi concluída no formato ISO 8601, por exemplo, 2021-06-01T09:00:00Z.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
  --next-rotation-time="NEXT_ROTATION_TIME"

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: o local do Google Cloud do segredo.
  • PROJECT_ID: o ID do projeto do Google Cloud.
  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado.
  • NEXT_ROTATION_TIME: o carimbo de data/hora em que a primeira rotação foi concluída no formato ISO 8601, por exemplo, 2021-06-01T09:00:00Z.

Método HTTP e URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time

Corpo JSON da solicitação:

{
  "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"}
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"1621434abc8dc4\"",
  "rotation": {
    "nextRotationTime": "2024-09-10T09:00:00Z",
    "rotationPeriod": "2592000s"
  }
}

Desativar a rotação em um secret

Para desativar a rotação de segredos, use um dos seguintes métodos:

Console

  1. Acesse a página do Secret Manager no console do Google Cloud:

    Acessar o Secret Manager

  2. Na página Secret Manager, clique na guia Secrets regionais.

  3. Localize o segredo que você quer editar e clique no menu Ações associado a ele. No menu Ações, clique em Editar.

  4. Acesse a seção Rotação. Desmarque a caixa de seleção Definir período de rotação e clique em Atualizar segredo.

gcloud

Remover o next_rotation_time de um secret

Antes de usar os dados do comando abaixo, faça estas substituições:

  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado
  • LOCATION: o local do Google Cloud do segredo

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --remove-next-rotation-time

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --remove-next-rotation-time

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --remove-next-rotation-time

Remover a programação de rotação de um secret. Isso remove next_rotation_time e rotation_period.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado
  • LOCATION: o local do Google Cloud do segredo

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --remove-rotation-schedule

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --remove-rotation-schedule

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --remove-rotation-schedule

REST

Remover o próximo horário de rotação de um secret

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: o local do Google Cloud do segredo
  • PROJECT_ID: o ID do projeto do Google Cloud
  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado

Método HTTP e URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time

Corpo JSON da solicitação:

{}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"16214530fa18d3\""
}

Remover a programação de rotação de um secret. Isso remove o tempo da próxima rotação e o período de rotação.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: o local do Google Cloud do segredo
  • PROJECT_ID: o ID do projeto do Google Cloud
  • SECRET_ID: o ID do secret ou do identificador totalmente qualificado

Método HTTP e URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation

Corpo JSON da solicitação:

{}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"16214530fa18d3\""
}

A seguir