Criar programações de rotação no Secret Manager

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. Nesta página, descrevemos como configurar essas programações de rotação.

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

O Secret Manager aciona uma mensagem SECRET_ROTATE para os tópicos designados do Pub/Sub 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 após o rotation_period especificado ter 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 seja necessário 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 aplicativos.

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

  • 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 orientações de formatação de carimbo de data/hora, consulte a referência de data/hora doGoogle Cloud .

  • Embora o Secret Manager tente novamente as tentativas de entrega de mensagens com falha, não podemos garantir a entrega se houver configurações incorretas relacionadas ao secret, à configuração do tópico, permissões ou 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 enviar 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 Google Cloud , a Google Cloud CLI ou a API Secret Manager.

Console

  1. No console Google Cloud , acesse a página Secret Manager.

    Acessar o Secret Manager

  2. Na página Secret Manager, clique em Criar secret.

  3. Na página Criar secret, 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. Acesse a seção Rotação e marque a caixa de seleção Definir período de rotação.

  6. 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.

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

  8. 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 o identificador totalmente qualificado do secret.
  • NEXT_ROTATION_TIME: o carimbo de data/hora em que a primeira rotação será 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 2.592.000 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 \
  --replication-policy "automatic" \
  --next-rotation-time="NEXT_ROTATION_TIME" \
  --rotation-period="ROTATION_PERIOD" \
  --topics="FULL_TOPIC_NAME"

Windows (PowerShell)

gcloud secrets create SECRET_ID `
  --replication-policy "automatic" `
  --next-rotation-time="NEXT_ROTATION_TIME" `
  --rotation-period="ROTATION_PERIOD" `
  --topics="FULL_TOPIC_NAME"

Windows (cmd.exe)

gcloud secrets create SECRET_ID ^
  --replication-policy "automatic" ^
  --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:

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

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "replication":{
    "automatic":{}
  },
  "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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/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: isso tem como alvo especificamente o 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. No console Google Cloud , acesse a página Secret Manager.

    Acessar o Secret Manager

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

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

gcloud

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

  • SECRET_ID: o ID do secret ou o identificador totalmente qualificado do secret.
  • NEXT_ROTATION_TIME: o carimbo de data/hora em que a primeira rotação será 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 \
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (PowerShell)

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

Windows (cmd.exe)

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

REST

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

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

Método HTTP e URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/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.googleapis.com/v1/projects/$PROJECT_ID/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.googleapis.com/v1/projects/$PROJECT_ID/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 secrets, use um dos seguintes métodos:

Console

  1. No console Google Cloud , acesse a página Secret Manager.

    Acessar o Secret Manager

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

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

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 o identificador totalmente qualificado do secret.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud secrets update SECRET_ID \
    --remove-next-rotation-time

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --remove-next-rotation-time

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --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 o identificador totalmente qualificado do secret.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud secrets update SECRET_ID \
    --remove-rotation-schedule

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --remove-rotation-schedule

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --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:

  • PROJECT_ID: o ID do projeto Google Cloud
  • SECRET_ID: o ID do secret ou o identificador totalmente qualificado do secret.

Método HTTP e URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/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.googleapis.com/v1/projects/$PROJECT_ID/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.googleapis.com/v1/projects/$PROJECT_ID/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:

  • PROJECT_ID: o ID do projeto Google Cloud
  • SECRET_ID: o ID do secret ou o identificador totalmente qualificado do secret.

Método HTTP e URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/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.googleapis.com/v1/projects/$PROJECT_ID/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.googleapis.com/v1/projects/$PROJECT_ID/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