Rotação de um segredo para um usuário
Visão geral
Você pode atualizar as informações de um usuário em um segredo.
Esta é a política de rotação de segredo mais usada.
Exemplo:
- Para o acesso ao banco de dados, uma conexão de banco de dados não é excluída durante a rotação de segredos. Após a rotação, novas conexões usam os novos segredos.
- Um usuário pode criar uma conta, por exemplo, usando um endereço de e-mail como nome de usuário. Geralmente, os usuários podem alterar senhas conforme necessário, mas não podem criar outros usuários ou alterar nomes de usuário.
- Os usuários temporários são criados no momento em que são necessários.
- As senhas são inseridas pelos usuários, não recuperadas do CSMS pelas aplicações. Esses usuários não precisam alterar seus nomes de usuário ou senhas.
Restrições
Verifique se sua conta tem a permissão KMS Administrator ou KMS CMKFullAccess. Para obter detalhes, consulte Gerenciamento de permissões do DEW.
APIs de rotação de segredos
Você pode chamar as seguintes APIs para rotacionar segredos localmente.
|
API |
Descrição |
|---|---|
|
Criar uma versão de segredo. |
|
|
Consultar as informações sobre uma versão de segredo especificada e o valor de segredo de texto não criptografado na versão. |
Exemplo de rotação de segredo de conta única
- Crie um segredo no console da HUAWEI CLOUD. Para obter detalhes, consulte Criação de um segredo.
- Prepare informações básicas de autenticação.
- ACCESS_KEY: chave de acesso da conta de Huawei
- SECRET_ACCESS_KEY: chave de acesso de segredo da conta de Huawei
- PROJECT_ID: ID do projeto de um site da HUAWEI CLOUD. Para obter detalhes, consulte Projeto.
- CSMS_ENDPOINT: ponto de extremidade para acessar o CSMS. Para obter detalhes, consulte Pontos de extremidade.
- Haverá riscos de segurança se a AK/SK usada para autenticação for gravada diretamente no código. Criptografe a AK/SK no arquivo de configuração ou nas variáveis de ambiente para armazenamento.
- Neste exemplo, a AK/SK armazenada nas variáveis de ambiente é usada para autenticação de identidade. Configure as variáveis de ambiente HUAWEICLOUD_SDK_AK e HUAWEICLOUD_SDK_SK primeiro no ambiente local.
- Rotação do segredo de um usuário.
- secretName indica o nome do segredo criado no console da Huawei Cloud.
- secretString indica o valor salvo no segredo criado no console da Huawei Cloud.
- versionId indica o ID de segredo gerado automaticamente depois que um segredo é criado no console da Huawei Cloud.
- LATEST_VERSION indica a versão de segredo.
import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.csms.v1.CsmsClient; import com.huaweicloud.sdk.csms.v1.model.CreateSecretVersionRequest; import com.huaweicloud.sdk.csms.v1.model.CreateSecretVersionRequestBody; import com.huaweicloud.sdk.csms.v1.model.CreateSecretVersionResponse; import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionRequest; import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionResponse; public class CsmsSingleAccountExample { /** * Basic authentication information: * - ACCESS_KEY: Access key of the Huawei account * - SECRET_ACCESS_KEY: Secret access key of the Huawei account * - PROJECT_ID: Huawei Cloud project ID. For details, see https://support.huaweicloud.com/intl/pt-br/productdesc-iam/iam_01_0023.html * - CSMS_ENDPOINT: endpoint address for accessing CSMS. For details, see https://support.huaweicloud.com/intl/pt-br/api-dew/dew_02_0052.html. * - There will be security risks if the AK/SK used for authentication is directly written into code. Encrypt the AK/SK in the configuration file or environment variables for storage. * - In this example, the AK/SK stored in the environment variables are used for identity authentication. Configure the environment variables HUAWEICLOUD_SDK_AK and HUAWEICLOUD_SDK_SK in the local environment first. */ private static final String ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_AK"); private static final String SECRET_ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_SK"); private static final String PROJECT_ID = "<ProjectID>"; private static final String CSMS_ENDPOINT = "<CsmsEndpoint>"; //Version ID used to query the latest secret version details. private static final String LATEST_VERSION = "latest"; public static void main(String[] args) { String secretName = args[0]; String secretString = args[1]; singleAccountRotation(secretName, secretString); } /** * Example: secret rotation for a single account * * @param secretName Secret name * @param secretString Secret content */ private static void singleAccountRotation(String secretName, String secretString) { //Host the new secret in CSMS. createNewSecretVersion(secretName, secretString); //Query the secret of the latest version based on the secret version latest. ShowSecretVersionResponse secretResponseByLatest = showSecretVersionDetail(secretName, LATEST_VERSION); assert secretResponseByLatest.getVersion().getSecretString().equals(secretString); } /** * Example of creating a secret * If a secret version is added without version status, the program points the SYSCURRENT version status to the version by default. * * @param secretName Secret name * @param secretString Secret content * @return */ private static CreateSecretVersionResponse createNewSecretVersion(String secretName, String secretString) { CsmsClient csmsClient = getCsmsClient(); CreateSecretVersionRequest createSecretVersionRequest = new CreateSecretVersionRequest() .withSecretName(secretName) .withBody(new CreateSecretVersionRequestBody().withSecretString(secretString)); CreateSecretVersionResponse secretVersion = csmsClient.createSecretVersion(createSecretVersionRequest); System.out.printf("Created new version success, version id:%s", secretVersion.getVersionMetadata().getId()); return secretVersion; } /** * Query the secret of a specified version. * * @param secretName Secret name * @param versionId Secret_version_ID * @return */ private static ShowSecretVersionResponse showSecretVersionDetail(String secretName, String versionId) { ShowSecretVersionRequest showSecretVersionRequest = new ShowSecretVersionRequest().withSecretName(secretName) .withVersionId(versionId); CsmsClient csmsClient = getCsmsClient(); ShowSecretVersionResponse secretDetail = csmsClient.showSecretVersion(showSecretVersionRequest); System.out.printf("Query latest version success. version id:%s", secretDetail.getVersion().getVersionMetadata().getId()); return secretDetail; } /** * Obtain the CSMS client. * * @return */ private static CsmsClient getCsmsClient() { BasicCredentials auth = new BasicCredentials() .withAk(ACCESS_KEY) .withSk(SECRET_ACCESS_KEY) .withProjectId(PROJECT_ID); return CsmsClient.newBuilder().withCredential(auth).withEndpoint(CSMS_ENDPOINT).build(); } }