Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-13 GMT+08:00

Uso de CSMS para evitar fugas de AK y SK

O CSMS é um serviço de hospedagem do segredo 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 do segredo. O CSMS pode ajudá-lo a eliminar os riscos incorridos pela codificação rígida, configuração de texto não criptografado e abuso de permissão.

Escenario

Los secretos de aplicación se almacenan y se puede acceder a ellos temporalmente para evitar fugas de AK y SK.

Cómo funciona

Puede utilizar Identity and Access Management (IAM) para obtener claves de acceso temporales para Elastic Cloud Server (ECS) con el fin de proteger las AK y SK.

Los secretos de acceso pueden clasificarse en secretos permanentes y secretos temporales según sus períodos de validez. Los secretos de acceso permanentes incluyen nombres de usuario y contraseñas. Las claves de acceso tienen un período de validez más corto, se actualizan con frecuencia, por lo que son más seguras. Puede asignar una delegación de IAM a una instancia de ECS, de modo que las aplicaciones de la instancia de ECS puedan utilizar las AK y SK temporales con el token de seguridad para acceder al CSMS. Las claves de acceso temporales se obtienen dinámicamente cada vez que se requieren. También pueden almacenarse en memoria caché y actualizarse periódicamente.

Flujo del proceso

Figura 1 Proceso de configuración de agencias de ECS

Restricción

Solo el administrador o un usuario de IAM con permiso de ECS puede configurar una delegación para una instancia de ECS.

Procedimiento

  1. Cree una delegación de ECS en IAM.

    1. Inicie sesión en la consola de gestión.
    2. Haga clic en a la izquierda de la página y elija Management & Governance > Identity and Access Management. Se aparecerá la página Users.
    3. En el panel de navegación, seleccione Agencies.
    4. Haga clic en Create Agency en la esquina superior derecha.
    5. Configure los parámetros en el cuadro de diálogo Create Agency. Para obtener más información, consulte Parámetros de delegación.
      Figura 2 Creación de una delegación
      Tabla 1 Parámetros de delegación

      Nombre del parámetro

      Descripción

      Nombre de la delegación

      Ingrese el nombre de una delegación. Ejemplo: ECS_TO_CSMS

      Tipo de delegación

      Seleccione Cloud service.

      Servicio en la nube

      Seleccione Elastic Cloud Server (ECS) and Bare Metal Server (BMS).

      Período de validez

      Seleccione una duración. El valor puede ser Unlimited, 1 day o Custom.

      Descripción

      (Opcional) Introduzca la descripción de la delegación.

    6. Haga clic en Next para ir a la página de autorización.
    7. Haga clic en Create Policy en la esquina superior derecha. Si ya tiene una política, siga este paso.
      1. Configure los parámetros de políticas. Para obtener más información, consulte Parámetros de política.
        Figura 3 Creación de una política
        Tabla 2 Parámetros de política

        Nombre del parámetro

        Descripción

        Nombre de política

        Introduzca un nombre de política.

        Policy View

        Seleccione Visual editor.

        Policy Content

        • Allow: seleccione Allow.
        • Select service: seleccione Cloud Secret Management Service (CSMS).
        • Select action: seleccione los permisos de lectura y de escritura según sea necesario.
        • (Optional) Select resource: seleccione el ámbito de los recursos.
          • Specific: acceda a los secretos específicos.
            NOTA:

            Puede seleccionar Specify resource path y luego hacer clic en Add Resource Path para especificar un secreto accesible.

          • All: acceda a todos los secretos.
        • (Optional) Add request condition: haga clic en Add Request Condition, seleccione una clave de condición y un operador e introduzca los valores necesarios.

        Description

        (Opcional) Introduzca la descripción de la política.

    8. Seleccione una política para la delegación. Haga clic en Next.
    9. Seleccione un ámbito y haga clic en OK.
      • All resources: Los usuarios de IAM podrán utilizar todos los recursos, incluidos los de proyectos empresariales, proyectos específicos de la región y servicios globales de su cuenta según los recursos asignados.
      • Enterprise projects: El valor seleccionado se aplicará a los recursos de los proyectos empresariales que seleccione.
      • Region-specific projects: Los permisos seleccionados se aplicarán a los recursos de los proyectos específicos de la región que seleccione.

  2. Asigne una delegación (por ejemplo, ECS_TO_CSMS) a una instancia de ECS.

    • Para crear una instancia de ECS, realice las operaciones descritas en Creación de un ECS. En el Paso 3: Configurar ajustes avanzados, seleccione la nueva delegación (por ejemplo, ECS_TO_CSMS).
    • Para utilizar una instancia de ECS existente, lleve a cabo los siguientes pasos:
      1. Haga clic en a la izquierda de la página y elija Management & Governance > Identity and Access Management. Vaya a la página de ECS.
      2. Haga clic en el nombre de una instancia de ECS para ir a la página Summary.
      3. En el área Management Information, haga clic en y seleccione una delegación (por ejemplo, ECS_TO_CSMS).
        Figura 4 Selección de una delegación

  3. En una aplicación que se ejecute en la instancia de ECS, invoque a una API para obtener los secretos temporales de la delegación, incluida las AK y SK temporales con el token de seguridad, para acceder al CSMS.

    1. Obtenga las AK y SK temporales (en el directorio Security Key). Para obtener más detalles, consulte Obtención de metadatos.
      • URI

        /openstack/latest/securitykey

      • Método

        Solicitud GET

      • Se devuelven los siguientes datos:
        {
              "credential":{
                  "access": "LDHZK30XXXXXXXXXXXXV",
                  "secret":"gyqcdzVXXXXXXXXXXXXXXXXXXXXXXXMl6",
                  "securitytoken": "El9FI2C65qXXXXXXXXXXXXXXXXXXXXXnkcaoV",
                  "expires_at": "2022-07-14T12:09:24.147000Z"
                          }
        }
        • Extraiga los valores de access, secret y securitytoken para acceder al CSMS.
        • ECS gira automáticamente los secretos temporales para garantizar que sean seguros y válidos.
    2. Utilice las AK y SK temporales con el token de seguridad para acceder al CSMS.
      • Un ejemplo de la lista de secretos es el siguiente. Para obtener más detalles, consulte API de gestión de secretos.
      • Prepare la información básica de autenticación.
        • ACCESS_KEY: Clave de acceso de la cuenta de Huawei. Para obtener más detalles, consulte ¿Cómo obtengo una clave de acceso (AK/SK)?
        • SECRET_ACCESS_KEY: Clave de acceso secreta de la cuenta de Huawei. Para obtener más detalles, consulte ¿Cómo obtengo una clave de acceso (AK/SK)?
        • Habrá riesgos de seguridad si la AK/SK utilizada para la autenticación se escribe directamente en el código. Cifre la AK/SK en el archivo de configuración o en las variables de entorno para su almacenamiento.
        • En este ejemplo, las AK/SK almacenadas en las variables de entorno se utilizan para la autenticación de identidad. Primero configure las variables de entorno HUAWEICLOUD_SDK_AK y HUAWEICLOUD_SDK_SK en el entorno 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/en-us/productdesc-iam/iam_01_0023.html
        * - CSMS_ENDPOINT: endpoint address for accessing CSMS. For details, see https://support.huaweicloud.com/intl/en-us/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());
                 }
             }
        }