Segredos de bloqueio
Ao trabalhar com o site IBM Cloud® Secrets Manager, você pode criar bloqueios nos seus segredos para evitar que eles sejam excluídos ou modificados enquanto estiverem em uso pelos seus aplicativos.
Por padrão, um usuário ou aplicativo autorizado pode modificar os segredos que você gerencia no Secrets Manager a qualquer momento. Às vezes, por exemplo, durante uma auditoria de segurança, você pode querer evitar que alguém em sua equipe exclua acidentalmente um segredo. Ou, se você planeja girar seus segredos regularmente, você pode estar procurando uma maneira de implementar com segurança a versão mais nova de um segredo depois que uma rotação acontece. Com bloqueios, é possível construir fluxos de trabalho automatizados que ajudam a:
- Indique que um segredo está em uso por um ou mais aplicativos ou serviços.
- Evite que dados secretos sejam excluídos mesmo após a expiração de um segredo.
- Exclua com segurança versões mais antigas de segredos após a versão mais recente ser totalmente implementada em seus aplicativos.
- Evite o tempo de inatividade inadvertido em suas aplicações.
Para saber sobre as diretrizes sugeridas para uso de bloqueios para evitar o tempo de inatividade do aplicativo, confira Melhores práticas para rodar e bloquear segredos.
Antes de Iniciar
Antes de começar, certifique-se de ter o nível de acesso necessário. Para gerenciar bloqueios em seus segredos, você precisa da função de serviço Manager.
Segredos de bloqueio
Bloquear um segredo impede qualquer operação que possa resultar em modificar ou excluir seus dados secretos. Para bloquear um segredo, você anexa um ou mais bloqueios à sua versão atual ou anterior.
Quando você tenta modificar ou excluir um segredo enquanto ele está bloqueado, o site Secrets Manager nega a solicitação com uma resposta HTTP 412 Precondition Failed. Você vê uma mensagem de erro semelhante ao exemplo a seguir:
The requested action can't be completed because the secret version is locked.
Se você está trabalhando com segredos dinâmicosUm valor exclusivo, como uma senha ou uma chave de API, que é criado dinamicamente e cedido em forma de lease para um aplicativo que requer acesso a um recurso protegido. Depois que um segredo dinâmico chega ao fim de seu lease, o acesso ao recurso protegido é revogado e o segredo é excluído automaticamente., como as credenciais do IAM, bloquear seus segredos também significa que, por padrão, esses segredos não podem ser lidos ou acessados. Para obter mais informações, consulte Por que não consigo ler um segredo de credenciais do IAM bloqueado?
Um segredo de credenciais personalizadas pode ser bloqueado somente depois que todas as suas tarefas forem concluídas.
Se um segredo bloqueado atingir sua data de expiração, ele permanece no estado Ativo e seus dados permanecem acessíveis para suas aplicações. Secrets Manager move o segredo para o estado Destruído e exclui permanentemente os dados secretos expirados apenas depois que todos os bloqueios no segredo são removidos.
SSL / TLS certificados ainda atingem suas datas de expiração definidas e passam para o estado Destruído, mesmo que estejam bloqueados. Para obter mais informações, consulte Por que meu certificado bloqueado se deslocou para o estado Destruído?
- Se você tentar girar um segredo enquanto sua versão atual é bloqueada e a versão anterior é desbloqueada (ou se uma rotação automática está agendada), o pedido para rodar o segredo é permitido. A versão secreta atual torna-se a nova versão anterior, retendo seus bloqueios existentes. Uma nova versão atual é criada sem bloqueios.
- Se você tentar girar um segredo enquanto sua versão anterior está bloqueada (ou se uma rotação automática está agendada), seu pedido para girar o segredo é negado. A rotação é permitida somente após a remoção de todos os bloqueios na versão secreta anterior.
Criação de bloqueios na interface do usuário
É possível criar até 1.000 bloqueios em um segredo usando a UI do Secrets Manager. Cada bloqueio pode ser usado para representar um único aplicativo ou serviço que usa o seu segredo.
Um segredo é considerado bloqueado depois de anexar um ou mais bloqueios a ele. Um bloqueio pode ser aplicado apenas em uma versão secreta que contém carga útil ativa, ou dados secretos.
Para ajudá-lo a criar um novo bloqueio e remover bloqueios mais antigos em uma única operação, você também pode especificar um modo opcional na criação de bloqueios.
| Modo | Descrição |
|---|---|
| Remover bloqueios anteriores | Remove quaisquer outros bloqueios que correspondam ao nome que você especificar. Se quaisquer bloqueios de correspondência forem encontrados na versão anterior do segredo, esses bloqueios são excluídos quando seu novo bloqueio for criado.
Por exemplo, suponha que a versão anterior do seu segredo contenha um bloqueio |
| Remover bloqueios anteriores e excluir dados da versão anterior | É igual à opção anterior, mas também exclui permanentemente os dados da versão anterior do segredo, caso não haja nenhum bloqueio associado a ela.
Suponha que a versão anterior do seu segredo contenha um bloqueio |
Criando um bloqueio na versão atual do segredo
Você pode bloquear a versão atual de um segredo usando a UI Secrets Manager. Uma solicitação bem-sucedida anexa um novo bloqueio à versão atual de seu segredo selecionado ou substitui um bloqueio de mesmo nome se ele já existir.
- No console, clique no ícone Menu
> Lista de Recursos.
- Na lista de serviços, selecione sua instância do Secrets Manager.
- Na IU Secrets Manager, acesse a lista Segredos.
- Na linha correspondente ao segredo que você deseja bloquear, clique no menu “ Ações ”
> Bloqueios > Criar bloqueio.
- Adicione um nome e uma descrição para identificar facilmente a trava.
- A partir da lista de versões para bloquear, selecione Atual.
- Opcional: Anexar atributos JSON para o seu bloqueio. Você pode incluir um objeto JSON com cada bloqueio para guardar qualquer informação que você possa precisar para um fluxo automatizado. Por exemplo, um par de valor chave que identifica o recurso que você deseja associar a esse bloqueio.
- Opcional: Faça o bloqueio exclusivo. Escolha esta opção para remover quaisquer outros bloqueios que combinem com o nome que você forneceu. Se quaisquer bloqueios de correspondência forem encontrados na versão anterior do segredo, esses bloqueios são excluídos quando seu novo bloqueio for criado.
- Opcional: Excluir os dados da versão anterior. Escolha esta opção para também excluir permanentemente os dados da versão secreta anterior se ele não tiver bloqueios que estejam associados a ele.
- Clique em Criar. Um novo bloqueio é criado para a sua versão secreta selecionada.
Como criar um bloqueio na versão secreta anterior
Você pode bloquear a versão anterior de um segredo usando a UI Secrets Manager. Uma solicitação bem-sucedida anexa um novo bloqueio à versão anterior do seu segredo selecionado ou substitui um bloqueio de mesmo nome se ele já existir.
- Na IU Secrets Manager, acesse a lista Segredos.
- Na linha correspondente ao segredo que você deseja bloquear, clique no menu “ Ações ”
> Bloqueios > Criar bloqueio.
- Adicione um nome e uma descrição para identificar facilmente a trava.
- A partir da lista de versões para bloquear, selecione Anterior.
- Opcional: Anexar atributos JSON para o seu bloqueio. Você pode incluir um objeto JSON com cada bloqueio para guardar qualquer informação que você possa precisar para um fluxo automatizado. Por exemplo, um par de valor chave que identifica o recurso que você deseja associar a esse bloqueio.
- Clique em Criar. Um novo bloqueio é criado para a sua versão secreta selecionada.
Criação de bloqueios pela CLI
É possível criar até 1000 bloqueios em um segredo usando a CLI do Secrets Manager. Cada bloqueio pode ser usado para representar um único aplicativo ou serviço que usa o seu segredo.
Um segredo é considerado bloqueado depois de anexar um ou mais bloqueios a ele. Um bloqueio pode ser aplicado apenas em uma versão secreta que contém carga útil ativa, ou dados secretos.
Para ajudá-lo a criar um novo bloqueio e remover bloqueios mais antigos em uma única operação, você também pode especificar um modo opcional na criação de bloqueios.
| Modo | Descrição |
|---|---|
| Remover bloqueios anteriores | Remove quaisquer outros bloqueios que correspondam ao nome que você especificar. Se quaisquer bloqueios de correspondência forem encontrados na versão anterior do segredo, esses bloqueios são excluídos quando seu novo bloqueio for criado.
Por exemplo, suponha que a versão anterior do seu segredo contenha um bloqueio |
| Remover bloqueios anteriores e excluir dados da versão anterior | É igual à opção anterior, mas também exclui permanentemente os dados da versão anterior do segredo, caso não haja nenhum bloqueio associado a ela.
Suponha que a versão anterior do seu segredo contenha um bloqueio |
Criando um bloqueio na versão atual do segredo
É possível bloquear a versão atual de um segredo usando a CLI do Secrets Manager. Uma solicitação bem-sucedida anexa um novo bloqueio à versão atual de seu segredo selecionado ou substitui um bloqueio de mesmo nome se ele já existir.
Para criar um bloqueio na versão atual de um segredo usando o plug-in da CLI Secrets Manager, execute o comando ibmcloud secrets-manager secret-locks-bulk-create.
É possível especificar o tipo de segredo, o ID do segredo e o modo.
ibmcloud secrets-manager secret-locks-bulk-create \
--id=exampleString \
--locks='[{"name": "lock-example-1", "description": "lock for consumer 1", "attributes": {"anyKey": "anyValue"}}]' \
--mode=remove_previous
Criação de bloqueios com a API
É possível criar até 1000 bloqueios em um segredo usando a API Secrets Manager. Cada bloqueio pode ser usado para representar um único aplicativo ou consumidor que usa o seu segredo. Uma solicitação bem-sucedida anexa um novo bloqueio ao seu segredo ou substitui um bloqueio de mesmo nome se ele já existir.
Um segredo é considerado bloqueado depois de anexar um ou mais bloqueios a ele. Um bloqueio pode ser aplicado apenas em uma versão secreta que contém carga útil ativa, ou dados secretos.
Para ajudá-lo a criar um novo bloqueio e remover bloqueios mais antigos em uma única operação, você também pode especificar um modo opcional na criação de bloqueios.
| Modo | Parâmetro de consulta | Descrição |
|---|---|---|
| Remover bloqueios anteriores | mode=remove_previous |
Remove quaisquer outros bloqueios que correspondam ao nome que você especificar. Se quaisquer bloqueios de correspondência forem encontrados na versão anterior do segredo, esses bloqueios são excluídos quando seu novo bloqueio for criado.
Por exemplo, suponha que a versão anterior do seu segredo contenha um bloqueio |
| Remover bloqueios anteriores | mode=remove_previous_and_delete |
É igual à opção “ remove_previous ”, mas também exclui permanentemente os dados da versão anterior do segredo, caso não haja nenhum bloqueio associado a ela.
Suponha que a versão anterior do seu segredo contenha um bloqueio |
Criando bloqueios na versão secreta atual
A solicitação a seguir cria dois bloqueios na versão atual de um segredo. Ao chamar a API, substitua as variáveis de ID e o token IAM pelos valores que são específicos para a sua instância do Secrets Manager.
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"locks": [
{
"name": "lock-1",
"description": "Lock for consumer 1.",
"attributes": {
"key": "value"
}
},
{
"name": "lock-2",
"description": "Lock for consumer 2.",
"attributes": {
"key": "value"
}
}
]
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{id}/locks_bulk"
Se você está construindo um fluxo automatizado, você pode usar o objeto attributes para especificar dados de valor chave com cada bloqueio em seu segredo. Por exemplo, você pode incluir um identificador de recursos, como um
ID ou Nome de Recurso em Nuvem (CRN).
Uma resposta bem-sucedida retorna detalhes sobre os novos bloqueios, juntamente com outros metadados.
{
"secret_id": "0cf4addb-7a90-410b-a3a7-a15bbe2b7909",
"secret_group_id": "d8371728-95c8-4c12-b2af-1af98adb9e41",
"versions": [
{
"version_id": "7bf3814d-58f8-4df8-9cbd-f6860e4ca973",
"version_alias": "current",
"locks": [
"lock-3",
"lock-4"
],
"payload_available": true
},
{
"version_id": "5bf89b0c-df55-c8d5-7ad6-8816951c6784",
"version_alias": "previous",
"locks": [
"lock-1",
"lock-2"
],
"payload_available": true
}
]
}
Para obter mais informações sobre os parâmetros de solicitação opcionais e necessários, consulte a Referência de API.
Como criar bloqueios na versão secreta anterior
A solicitação a seguir cria dois bloqueios na versão anterior de um segredo. Ao chamar a API, substitua as variáveis de ID e o token IAM pelos valores que são específicos para a sua instância do Secrets Manager.
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"locks": [
{
"name": "lock-1",
"description": "Lock for consumer 1.",
"attributes": {
"key": "value"
}
},
{
"name": "lock-2",
"description": "Lock for consumer 2.",
"attributes": {
"key": "value"
}
}
]
}' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{id}/versions/{version_id}/locks_bulk"
Uma resposta bem-sucedida retorna detalhes sobre os novos bloqueios, juntamente com outros metadados.
{
"secret_id": "0cf4addb-7a90-410b-a3a7-a15bbe2b7909",
"secret_group_id": "d8371728-95c8-4c12-b2af-1af98adb9e41",
"versions": [
{
"version_id": "7bf3814d-58f8-4df8-9cbd-f6860e4ca973",
"version_alias": "current",
"locks": [
"lock-3",
"lock-4"
],
"payload_available": true
},
{
"version_id": "5bf89b0c-df55-c8d5-7ad6-8816951c6784",
"version_alias": "previous",
"locks": [
"lock-1",
"lock-2"
],
"payload_available": true
}
]
}
Para obter mais informações sobre os parâmetros de solicitação opcionais e necessários, consulte a Referência de API.
Desbloqueando segredos
Um segredo é considerado desbloqueado e pode ser modificado ou excluído somente depois que todos os seus bloqueios associados forem removidos. Você pode usar o Secrets Manager UI ou APIs para excluir bloqueios que estão associados a um segredo.
Exclusão de bloqueios na interface do usuário
Você pode excluir um bloqueio que é anexado a um segredo existente usando a UI Secrets Manager.
- No console, clique no ícone Menu
> Lista de Recursos.
- Na lista de serviços, selecione sua instância do Secrets Manager.
- Na IU Secrets Manager, acesse a lista Segredos.
- Na linha correspondente ao segredo que você deseja atualizar, clique no menu “ Ações ”
> Fechaduras.
- Na linha correspondente ao bloqueio que você deseja excluir, clique no
menu Ações > Excluir.
- Para confirmar a exclusão, digite o nome do segredo. Clique em Excluir.
Seu bloqueio agora é excluído. Para desbloquear completamente o segredo, é possível remover todos os bloqueios existentes.
Exclusão de bloqueios com a API
Você pode usar a API Secrets Manager para excluir um ou mais bloqueios que estão associados com a versão secreta específica.
Uma solicitação bem-sucedida exclui os bloqueios que você especificar. Para remover todos os bloqueios, é possível passar {"locks": ["*"]} no corpo da solicitação. Caso contrário, especifique os nomes dos bloqueios
que você deseja excluir. Por exemplo, {"locks": ["lock-1", "lock-2"]}.
Para entender se um segredo contém bloqueios, verifique o campo locks_total que é retornado como parte dos metadados do seu segredo.
curl -X DELETE
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{secret_id}/versions/{id}/locks_bulk?name=[ "lock-example-1" ]"
Para obter mais informações sobre os parâmetros de solicitação opcionais e necessários, consulte a Referência de API.