Uso do CSMS para evitar vazamento de AK e SK
O CSMS é um serviço de hospedagem de credenciais seguro, confiável e fácil de usar. Os usuários ou aplicações podem usar o CSMS para criar, recuperar, atualizar e excluir credenciais de maneira unificada durante todo o ciclo de vida das credenciais. O CSMS pode ajudá-lo a eliminar os riscos incorridos pela codificação rígida, configuração de texto simples e abuso de permissão.
Cenário
Os segredos de aplicação são armazenados e podem ser acessados temporariamente para evitar vazamentos de AK e SK.
Como funciona
Você pode usar o Identity and Access Management (IAM) para obter chaves de acesso temporárias para o Elastic Cloud Server (ECS) para proteger AKs e SKs.
Os segredos de acesso podem ser classificados em segredos permanentes e segredos temporários com base em seus períodos de validade. Os segredos de acesso permanente incluem nomes de usuário e senhas. As chaves de acesso temporárias têm um período de validade mais curto, são atualizadas com frequência e, portanto, são mais seguras. Você pode atribuir uma agência do IAM a uma instância do ECS para que as aplicações na instância do ECS possam usar o AK, a SK e o token de segurança temporários para acessar o CSMS. As chaves de acesso temporárias são obtidas dinamicamente sempre que são necessárias. Elas também podem ser armazenadas em cache na memória e atualizadas periodicamente.
Fluxo do processo
Restrição
Somente o administrador ou um usuário do IAM com a permissão do ECS pode configurar uma agência para uma instância do ECS.
Procedimento
- Crie uma agência do ECS no IAM.
- Faça logon no console de gerenciamento.
- Clique em à esquerda da página e escolha Management & Governance > Identity and Access Management. A página Users é exibida.
- No painel de navegação, escolha Agencies.
- Clique em Create Agency no canto superior direito.
- Configure os parâmetros na caixa de diálogo Create Agency. Para obter mais informações, consulte Parâmetros da agência.
Figura 2 Criação de uma agência
Tabela 1 Parâmetros da agência Nome do parâmetro
Descrição
Agency Name
Insira um nome de agência. Exemplo: ECS_TO_CSMS
Agency Type
Selecione Cloud service.
Cloud Service
Selecione Elastic Cloud Server (ECS) and Bare Metal Server (BMS).
Validity Period
Selecione uma duração. O valor pode ser Unlimited, 1 day ou Custom.
Description
(Opcional) Insira a descrição da agência.
- Clique em Next para acessar a página de autorização.
- Clique em Create Policy no canto superior direito. Se você já tiver uma política, pule esta etapa.
- Configure parâmetros de política. Para obter mais informações, consulte Parâmetros de política.
Figura 3 Criação de uma política
Tabela 2 Parâmetros de política Nome do parâmetro
Descrição
Policy Name
Insira um nome de política.
Policy View
Selecione Visual editor.
Policy Content
- Allow: selecione Allow.
- Select service: selecione Cloud Secret Management Service (CSMS).
- Select action: selecione as permissões de leitura e gravação conforme necessário.
- (Optional) Select resource: selecione o escopo dos recursos.
- Specific: acesse segredos específicos.
NOTA:
Você pode selecionar Specify resource path e, em seguida, clique em Add Resource Path para especificar um segredo acessível.
- All: acesse todos os segredos.
- Specific: acesse segredos específicos.
- (Optional) Add request condition: clique em Add Request Condition, selecione uma chave de condição e um operador e insira os valores conforme necessário.
Description
(Opcional) Insira a descrição da política.
- Configure parâmetros de política. Para obter mais informações, consulte Parâmetros de política.
- Selecione uma política para a agência. Clique em Next.
- Selecione um escopo e clique em OK.
- All resources: os usuários do IAM poderão usar todos os recursos, incluindo aqueles em projetos empresariais, projetos específicos de região e serviços globais em sua conta com base nas permissões atribuídas.
- Enterprise projects: as permissões selecionadas serão aplicadas aos recursos nos projetos empresariais selecionados.
- Region-specific projects: as permissões selecionadas serão aplicadas aos recursos nos projetos específicos da região que você selecionar.
- Atribua uma agência (por exemplo, ECS_TO_CSMS) a uma instância do ECS.
- Para criar uma instância do ECS, execute as operações descritas em Criação de um ECS. Na Etapa 3: configurar as definições avançadas, selecione a nova agência (por exemplo, ECS_TO_CSMS).
- Para usar uma instância do ECS existente, execute as seguintes etapas:
- Clique em à esquerda da página e escolha Management & Governance > Identity and Access Management. Acesse a página do ECS.
- Clique no nome de uma instância do ECS para acessar a página Summary.
- Na área Management Information, clique em e selecione uma agência (por exemplo, ECS_TO_CSMS).
Figura 4 Seleção de uma agência
- Em uma aplicação em execução na instância do ECS, chame uma API para obter os segredos da agência temporária, incluindo o AK, a SK e o token de segurança temporários, para acessar o CSMS.
- Obtenha o AK e a SK temporários (no diretório Security Key). Para obter detalhes, consulte Obtenção de metadados.
- URI
- Método
- Os seguintes dados são retornados:
{ "credential":{ "access": "LDHZK30XXXXXXXXXXXXV", "secret":"gyqcdzVXXXXXXXXXXXXXXXXXXXXXXXMl6", "securitytoken": "El9FI2C65qXXXXXXXXXXXXXXXXXXXXXnkcaoV", "expires_at": "2022-07-14T12:09:24.147000Z" } }
- Extraia os valores de access, secret e securitytoken para acessar o CSMS.
- O ECS rotaciona automaticamente os segredos temporários para garantir que eles sejam seguros e válidos.
- Use o AK, a SK e o token de segurança temporários para acessar o CSMS.
- Um exemplo da lista de segredos é o seguinte. Para obter detalhes, consulte APIs de gerenciamento de segredos.
- Prepare informações básicas de autenticação.
- ACCESS_KEY: chave de acesso da conta da Huawei. Para obter detalhes, consulte Como obter uma chave de acesso (AK/SK)?
- SECRET_ACCESS_KEY: chave de acesso de segredo da conta da Huawei. Para obter detalhes, consulte Como obter uma chave de acesso (AK/SK)?
- 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.
package com.huaweicloud.sdk.test; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.csms.v1.region.CsmsRegion; import com.huaweicloud.sdk.csms.v1.*; import com.huaweicloud.sdk.csms.v1.model.*; public class ListSecretsSolution { public static void main(String[] args) { * 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"); String securitytoken = "<YOUR SecurityToken>"; String ak = System.getenv("CLOUD_SDK_AK"); String sk = System.getenv("CLOUD_SDK_SK"); ICredential auth = new BasicCredentials() .withAk(ak) .withSk(sk) .withSecurityToken(securitytoken); CsmsClient client = CsmsClient.newBuilder() .withCredential(auth) .withRegion(CsmsRegion.valueOf("cn-north-1")) .build(); ListSecretsRequest request = new ListSecretsRequest(); try { ListSecretsResponse response = client.listSecrets(request); System.out.println(response.toString()); } catch (ConnectionException e) { e.getMessage(); } catch (RequestTimeoutException e) { e.getMessage(); } catch (ServiceResponseException e) { e.getMessage(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } } }
- Obtenha o AK e a SK temporários (no diretório Security Key). Para obter detalhes, consulte Obtenção de metadados.