Todos los productos
Search
Centro de documentos

Managed Service for Grafana:Compartir paneles de Grafana con una clave de API

Última actualización: Sep 09, 2026

Genere enlaces compartibles para los paneles, sin necesidad de iniciar sesión, mediante la autenticación con clave de API.

Contexto

  • En la versión nativa de Grafana, el acceso directo a un panel requiere usar instantáneas o habilitar el acceso anónimo. Las instantáneas son estáticas y no muestran actualizaciones de datos en tiempo real, mientras que el acceso anónimo sin una lista blanca de IP representa un riesgo de seguridad. En cambio, Managed Service for Grafana permite generar enlaces compartibles para los paneles, sin necesidad de iniciar sesión, mediante la autenticación con clave de API.

    • Estos enlaces se pueden compartir con otros usuarios.

    • Los usuarios que tengan el enlace acceden al panel sin iniciar sesión, ya que la clave de API proporciona la autenticación.

  • En Grafana 10.0.x, la función de clave de API se reemplazó por tokens de cuenta de servicio, aunque las claves de API siguen disponibles. En Grafana 11.x, las claves de API se eliminaron por completo y la página de administración de claves de API devuelve un error 404. En esta versión, solo los tokens de cuenta de servicio proporcionan autenticación. Para obtener más información, consulte Cuentas de servicio.

Paso 1: Configurar los parámetros de Grafana

  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, seleccione Managed Service for Grafana > Workspace Management.

  2. Inicie sesión en la consola de Managed Service for Grafana. En el panel de navegación izquierdo, haga clic en Workspace Management.

  3. En la página Workspace Management, haga clic en el identificador del espacio de trabajo que desea gestionar.

  4. En el panel de navegación izquierdo, haga clic en Parameter Settings.

  5. En la lista de parámetros de la izquierda, seleccione aliyun y luego haga clic en Modify Parameters.

  6. Establezca el parámetro api_key_share en true y luego haga clic en Save and Apply.

    En la categoría de configuración aliyun, busque el parámetro api_key_share en la lista de parámetros.

  7. Opcional: Para habilitar la inserción mediante iframe, configure los siguientes parámetros.

    • Para la inserción entre dominios

      Su dominio debe usar HTTPS. Después, establezca los tres parámetros de security siguientes.

      allow_embedding=true
      cookie_samesite=none
      cookie_secure=true
    • Para la inserción dentro del mismo dominio

      En la sección security, establezca el parámetro allow_embedding en true para habilitar la inserción mediante iframe.

    • Si inserta el iframe en otra instancia de Grafana, ajuste los parámetros de panels en dicha instancia.

      enable_alpha = true
      disable_sanitize_html = true

Paso 2: Crear una clave de API

El procedimiento para crear una clave de API varía entre Grafana 9.0.x y 10.0.x. Compruebe su versión de Grafana y siga el procedimiento correspondiente.

La función de clave de API se eliminó en Grafana 11.x. En su lugar, cree un token de cuenta de servicio con el procedimiento de Grafana 10.0.x.

Si actualiza de la versión 9.0.x a la 10.0.x, las claves de API creadas en Grafana 9.0.x seguirán visibles en la página Administration > api keys. Haga clic en migrate to service account para migrarlas a una cuenta de servicio. Tras la migración, la página api keys se oculta. Las claves de API existentes seguirán funcionando.

Grafana 9.0.x

  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, seleccione Managed Service for Grafana > Workspace Management.

  2. Inicie sesión en la consola de Managed Service for Grafana. En el panel de navegación izquierdo, haga clic en Workspace Management.

  3. En la página Workspace Management, busque el espacio de trabajo que desea gestionar y haga clic en la URL de la columna URL para ir a Grafana.

    Nota

    Puede iniciar sesión en Grafana con la cuenta de administrador de Grafana y la contraseña que configuró al crear el espacio de trabajo. También puede hacer clic en Sign in with Alibaba Cloud para iniciar sesión en Grafana con la cuenta actual de Alibaba Cloud.

  4. En la esquina superior izquierda de la página principal de Grafana, haga clic en el icono image.

  5. En el panel de navegación izquierdo de Grafana, seleccione Configuration > API keys.

    Nota

    Se requieren permisos de administrador para acceder a esta página.

  6. Haga clic en New API key o Add API key y configure los parámetros.

    Parámetro

    Descripción

    Key name

    Un nombre único para la clave de API.

    Role

    Establézcalo en Viewer.

    Time to live

    El periodo de validez. Por ejemplo: 60s (60 segundos), 10m (10 minutos) o 1d (1 día).

  7. Haga clic en Add. En el cuadro de diálogo que aparece, copie y guarde la clave de API.

    Importante

    No es posible volver a ver la clave de API después de cerrar el cuadro de diálogo.

    En el cuadro de diálogo API key created, haga clic en el botón Copy junto al campo Key para copiar la clave de API. Este cuadro de diálogo también incluye un comando cURL de ejemplo para autenticar solicitudes mediante el encabezado HTTP Authorization: curl -H "Authorization: Bearer eyJrIjoi..." https://grafana-xxx.grafana.aliyuncs.com/api/dashboards/home.

Grafana 10.0.x

  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, seleccione Managed Service for Grafana > Workspace Management.

  2. Inicie sesión en la consola de Managed Service for Grafana. En el panel de navegación izquierdo, haga clic en Workspace Management.

  3. En la página Workspace Management, busque el espacio de trabajo que desea gestionar y haga clic en la URL de la columna URL para ir a Grafana.

    Nota

    Puede iniciar sesión en Grafana con la cuenta de administrador de Grafana y la contraseña que configuró al crear el espacio de trabajo. También puede hacer clic en Sign in with Alibaba Cloud para iniciar sesión en Grafana con la cuenta actual de Alibaba Cloud.

  4. En la esquina superior izquierda de la página principal de Grafana, haga clic en el icono image.

  5. En el panel de navegación izquierdo de Grafana, seleccione Manage > Service Accounts.

    Importante
    • Se requieren permisos de administrador para acceder a este menú.

    • Una cuenta de servicio consume una cuenta de usuario.

  6. Haga clic en Add service account, introduzca los parámetros y luego haga clic en Create.

    Parámetro

    Descripción

    Display name

    Un nombre único para la cuenta de servicio.

    Role

    Establézcalo en Viewer.

  7. En el lado derecho de la página, haga clic en Add service account token e introduzca los parámetros.

    Parámetro

    Descripción

    Display name

    Un nombre único para el token.

    Expiration

    El periodo de validez del token.

    • No Expiration: el token no caduca.

    • Set Expiration date: especifique una fecha de caducidad.

    Expiration date

    Obligatorio cuando selecciona Set Expiration date.

  1. Haga clic en Generate token. En el cuadro de diálogo que aparece, haga clic en Copy to clipboard and close.

Importante

No es posible volver a ver el token después de cerrar el cuadro de diálogo.

Paso 3: Generar un enlace compartible

Grafana 9.0.x

  1. En la interfaz de Grafana, abra el panel que desea compartir.

  2. Haga clic en el icono 分享图标 y obtenga el enlace compartible en la pestaña Link.

  3. Agregue &aliyun_api_key=<API key value> al final del enlace. Reemplace <API key value> con la clave de API que obtuvo en Step 2.

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJr****WkIwNnN2c0RTSD******
  4. Utilice el enlace compartible para acceder al panel de Grafana sin iniciar sesión.

Grafana 10.0.x

  1. En la interfaz de Grafana, abra el panel que desea compartir.

  2. Haga clic en el icono 分享图标 y obtenga el enlace compartible en la pestaña Link.

    En el cuadro de diálogo, puede configurar opciones como lock time range (convierte un intervalo de tiempo relativo en uno absoluto), theme (actual, oscuro o claro) y shorten URL. En la sección Link URL, en la parte inferior, haga clic en el botón Copy.

  3. Agregue &aliyun_api_key=<API key value> al final del enlace. Mantenga sin cambios el nombre del parámetro de URL aliyun_api_key y reemplace su valor con el token de cuenta de servicio que obtuvo en Step 2.

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJrIjoiWkIwNnN2c0RTSD******
  4. Utilice el enlace compartible para acceder al panel de Grafana sin iniciar sesión.

Paso 4: Generar un enlace compartible de alta seguridad (opcional)

Los enlaces compartibles generados en Step 3: Generate a shareable link requieren una rotación periódica de la clave de API para evitar riesgos de seguridad por exposición de la clave. En esta sección se describe cómo generar un enlace compartible de alta seguridad para una clave de API en Grafana 9.0.x y para un token de cuenta de servicio en Grafana 10.0.x.

Antes de empezar, debe establecer el parámetro de ejecución api_key_share_version en v2.

  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, seleccione Managed Service for Grafana > Workspace Management.

  2. Inicie sesión en la consola de Managed Service for Grafana. En el panel de navegación izquierdo, haga clic en Workspace Management.

  3. En la página workspace management, haga clic en el identificador del espacio de trabajo de destino. En el panel de navegación izquierdo, haga clic en Parameter Settings.

  4. Establezca el parámetro de ejecución api_key_share_version en v2 y luego haga clic en Save and Apply.

Clave de API (Grafana 9.0.x)

  1. Descodifique en Base64 la clave de API que obtuvo en Step 2: Create an API key.

    Base64 es un método de codificación común que se usa para transmitir código de bytes de 8 bits por la red. Utiliza 64 caracteres imprimibles para representar datos binarios.

    • Busque un sitio web con herramientas comunes de descifrado, como base64.

    • Descodificar en Java.

      package main;
      import java.util.Base64;
      public class Base64Example{
          public static void main(String[] args) {
              String apiKey = "eyJr****REpzZGYzd2JIa0N3ekgyWjlWWmhrSTM5bWdGT2hGSmwiLCJuIjoidGVzdDEiLCJpZCI6MX0=";
              String decodeKey = new String(Base64.getDecoder().decode(apiKey));
              System.out.println(decodeKey);
          }
      }

      Salida:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
    • Descodificar en Go.

      package main;
      import "fmt"
      import "encoding/base64"
      func main() {
      	apiKey := "eyJr****REpzZGYzd2JIa0N3ekgyWjlWWmhrSTM5bWdGT2hGSmwiLCJuIjoidGVzdDEiLCJpZCI6MX0="
      	decodeKey, err := base64.StdEncoding.DecodeString(apiKey)
      	if err != nil {
      		fmt.Println(err.Error())
      		return
      	}
      	fmt.Println(string(decodeKey))
      }

      Salida:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
  2. Derive un hash PBKDF2 a partir del valor k del objeto JSON descodificado.

    PBKDF2 (Password-Based Key Derivation Function 2) es una función de derivación de claves que se utiliza para obtener de forma segura una clave criptográfica a partir de una contraseña y otros parámetros, como una sal y el número de iteraciones. Se usa habitualmente para el almacenamiento de contraseñas. Su diseño dificulta que un atacante recupere contraseñas en texto plano o descifre las claves derivadas, incluso si se compromete una base de datos.

    Existen distintas formas de derivar el hash. A continuación se describen los parámetros obligatorios.

    Parámetro

    Descripción

    salt

    Establézcalo con el nombre de la clave de API, que corresponde al valor n del objeto JSON descodificado. En este ejemplo, el valor es test1.

    iterations

    Establezca el valor en 10000.

    output length

    Establezca el valor en 50 bytes.

    key size

    Establezca el valor en 256 bits.

    Output type

    Establezca el tipo en Hex.

    • Busque herramientas de cifrado en línea comunes, como PBKDF2.

    • Derivar el hash en Java.

      package main;
      import javax.crypto.SecretKeyFactory;
      import java.security.GeneralSecurityException;
      import javax.crypto.spec.PBEKeySpec;
      import java.security.spec.KeySpec;
      public class PBKDFExapmle {
          public static void main(String[] args) {
              String password = "DJsd****HkCwzH2Z9VZhkI39mgFOhFJl";
              String salt = "test1";
              int iterationCount = 10000;
              int outputLength = 50 * 8;
              try {
                  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), iterationCount, outputLength);
                  SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
                  byte[] keyBytes = skf.generateSecret(spec).getEncoded();
                  System.out.println(bytesToHex(keyBytes));
              } catch (GeneralSecurityException e) {
                  e.printStackTrace();
              }
          }
          private static String bytesToHex(byte[] bytes) {
              StringBuilder hexString = new StringBuilder();
              for (byte b : bytes) {
                  String hex = Integer.toHexString(0xff & b);
                  if (hex.length() == 1) {
                      hexString.append('0');
                  }
                  hexString.append(hex);
              }
              return hexString.toString();
          }
      }
      

      Salida:

      1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**
    • Derivar el hash en Go.

      package main;
      import "fmt"
      import "encoding/hex"
      import "crypto/sha256"
      import "golang.org/x/crypto/pbkdf2"
      func main() {
          password:="DJsd****HkCwzH2Z9VZhkI39mgFOhFJl"
          salt:="test1"
          newPasswd := pbkdf2.Key([]byte(password), []byte(salt), 10000, 50, sha256.New)
      	encodePassword:= hex.EncodeToString(newPasswd)
      	fmt.Println(encodePassword)
      }

      Salida:

      1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**
  3. Calcule una firma MD5 a partir de la salida de PBKDF2.

    El algoritmo de resumen de mensajes MD5 es una función hash criptográfica muy utilizada que genera un valor de hash de 128 bits (16 bytes) para garantizar la integridad de la transmisión de información.

    Construya la cadena que se va a firmar de la siguiente manera: <PBKDF2 Password> + "_" + <current Unix timestamp in seconds>

    Contraseña PBKDF2: 1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**

    Si la hora actual del sistema es 2024-09-20 17:12:13, la marca de tiempo Unix en segundos es 1726823533.

    Cadena que se va a firmar: 1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**_1726823533

    Existen distintas formas de calcular la firma MD5:

    • Busque herramientas de cifrado en línea comunes, como MD5.

    • Calcular la firma MD5 en Java.

      package main;
      import java.security.MessageDigest;
      public class MD5 {
          public static void main(String[] args) {
              String pbkdfPassword = "1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****";
              long timeSeconds=System.currentTimeMillis()/1000;
              String key=pbkdfPassword+"_"+timeSeconds;
              System.out.println(MD5.getMD5String(key,"UTF-8"));
          }
          public static String getMD5String(String str, String charset) {
              try {
                  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                  messageDigest.reset();
                  messageDigest.update(str.getBytes(charset));
                  byte[] byteArray = messageDigest.digest();
                  StringBuffer md5StrBuff = new StringBuffer();
                  for (int i = 0; i < byteArray.length; i++) {
                      if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
                          md5StrBuff.append("0").append(
                              Integer.toHexString(0xFF & byteArray[i]));
                      } else {
                          md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
                      }
                  }
                  return md5StrBuff.toString().toLowerCase();
              } catch (Exception e) {
                  e.printStackTrace();
                  throw new RuntimeException("MD5 error:"+e.getMessage());
              }
          }
      }
      
    • Calcular la firma MD5 en Go.

      package main;
      import (
          "crypto/md5"
          "encoding/hex"
          "fmt"
          "io"
          "time"
          "strconv"
      )
      func main() {
          // The string for which you want to calculate the MD5 hash.
          pbkdfPassword := "1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****"
          timeSeconds:= time.Now().Unix()
          key:=pbkdfPassword+"_"+strconv.FormatInt(timeSeconds, 10)
          // Use the MD5 package to calculate the MD5 hash of the string.
          hash := md5.New()
          io.WriteString(hash, key)
          md5Str := hash.Sum(nil)
          // Convert the binary MD5 hash to a hexadecimal string.
          md5StrHex := hex.EncodeToString(md5Str)
          fmt.Println("MD5 of", key, "is", md5StrHex)
      }
  4. Agregue la información de firma MD5 generada como parámetros al enlace.

    Parámetros:

    Parámetro

    Descripción

    Ejemplo

    aliyun_api_key_sign

    La firma MD5, que cambia con el tiempo.

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    La marca de tiempo de la firma. La firma caduca si la diferencia entre esta marca de tiempo y la hora del servidor supera un minuto.

    1726823533

    aliyun_api_key_name

    El nombre de la clave de API.

    test1

    aliyun_api_key_org_id

    El identificador de la organización a la que pertenece la clave de API.

    1

    aliyun_api_key_expire_seconds

    La duración, en segundos, durante la cual la sesión sigue siendo válida tras iniciar sesión con la URL firmada.

    Predeterminado: 3600

    Ejemplo:

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key_sign=c3bf89b867cc88df72d507edc4d1****&aliyun_api_key_timestamp=1726823533&aliyun_api_key_name=test1&aliyun_api_key_org_id=1

    Ahora puede generar mediante programación enlaces más seguros a Grafana, sin necesidad de iniciar sesión, lo que también evita la exposición de la clave de API.

Token de cuenta de servicio (Grafana 10.0.x)

  1. Divida el token de cuenta de servicio de Step 2: Create a service account token y derive un hash PBKDF2 a partir de sus componentes.

    PBKDF2 (Password-Based Key Derivation Function 2) es una función de derivación de claves que se utiliza para obtener de forma segura una clave criptográfica a partir de una contraseña y otros parámetros, como una sal y el número de iteraciones. Se usa habitualmente para el almacenamiento de contraseñas. Su diseño dificulta que un atacante recupere contraseñas en texto plano o descifre las claves derivadas, incluso si se compromete una base de datos.

    Divida el token de cuenta de servicio mediante el carácter de guion bajo (_).

    # Example service account token:
    Token: glsa_yV9HAOVCjNKkvKoLMiypOc5T0Oov****_4f5ff3ce
    # After splitting:
    Prefix: glsa
    Secret: yV9HAOVCjNKkvKoLMiypOc5T0Oov****
    Salt:   4f5ff3ce

    Existen distintas formas de derivar el hash. A continuación se describen los parámetros obligatorios.

    Parámetro

    Descripción

    salt

    Establézcalo con el sufijo del token. En este ejemplo, el valor es 4f5ff3ce.

    iterations

    Establezca el valor en 10000.

    output length

    Establezca el valor en 50 bytes.

    key size

    Establezca el valor en 256 bits.

    Output type

    Establezca el tipo en Hex.

    • Busque un sitio web con herramientas comunes de descifrado, como charsetpbkdf2.

    • Derivar el hash en Java.

      package main;
      import javax.crypto.SecretKeyFactory;
      import java.security.GeneralSecurityException;
      import javax.crypto.spec.PBEKeySpec;
      import java.security.spec.KeySpec;
      public class PBKDFExapmle {
          public static void main(String[] args) {
              String password = "yV9H****jNKkvKoLMiypOc5T0OovHXPV";
              String salt = "4f5ff3ce";
              int iterationCount = 10000;
              int outputLength = 50 * 8;
              try {
                  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), iterationCount, outputLength);
                  SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
                  byte[] keyBytes = skf.generateSecret(spec).getEncoded();
                  System.out.println(bytesToHex(keyBytes));
              } catch (GeneralSecurityException e) {
                  e.printStackTrace();
              }
          }
          private static String bytesToHex(byte[] bytes) {
              StringBuilder hexString = new StringBuilder();
              for (byte b : bytes) {
                  String hex = Integer.toHexString(0xff & b);
                  if (hex.length() == 1) {
                      hexString.append('0');
                  }
                  hexString.append(hex);
              }
              return hexString.toString();
          }
      }
      

      Salida:

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
    • Derivar el hash en Go.

      package main;
      import "fmt"
      import "encoding/hex"
      import "crypto/sha256"
      import "golang.org/x/crypto/pbkdf2"
      func main() {
          password:="yV9H****jNKkvKoLMiypOc5T0OovHXPV"
          salt:="4f5ff3ce"
          newPasswd := pbkdf2.Key([]byte(password), []byte(salt), 10000, 50, sha256.New)
      	encodePassword:= hex.EncodeToString(newPasswd)
      	fmt.Println(encodePassword)
      }

      Salida:

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
  2. Calcule una firma MD5 a partir de la salida de PBKDF2.

    El algoritmo de resumen de mensajes MD5 es una función hash criptográfica muy utilizada que genera un valor de hash de 128 bits (16 bytes) para garantizar la integridad y coherencia de la transmisión de información.

    Construya la cadena que se va a firmar de la siguiente manera: <PBKDF2 Password> + "_" + <current Unix timestamp in seconds>

    Contraseña PBKDF2: c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****

    Si la hora actual del sistema es 2024-09-20 17:12:13, la marca de tiempo Unix en segundos es 1726823533.

    Cadena que se va a firmar: c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****_1726823533

    Existen distintas formas de calcular la firma MD5:

    • Busque herramientas de cifrado en línea de uso común, como MD5.

    • Calcular la firma MD5 en Java.

      package main;
      import java.security.MessageDigest;
      public class MD5 {
          public static void main(String[] args) {
              String pbkdfPassword = "c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****";
              long timeSeconds=System.currentTimeMillis()/1000;
              String key=pbkdfPassword+"_"+timeSeconds;
              System.out.println(MD5.getMD5String(key,"UTF-8"));
          }
          public static String getMD5String(String str, String charset) {
              try {
                  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                  messageDigest.reset();
                  messageDigest.update(str.getBytes(charset));
                  byte[] byteArray = messageDigest.digest();
                  StringBuffer md5StrBuff = new StringBuffer();
                  for (int i = 0; i < byteArray.length; i++) {
                      if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
                          md5StrBuff.append("0").append(
                              Integer.toHexString(0xFF & byteArray[i]));
                      } else {
                          md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
                      }
                  }
                  return md5StrBuff.toString().toLowerCase();
              } catch (Exception e) {
                  e.printStackTrace();
                  throw new RuntimeException("MD5 error:"+e.getMessage());
              }
          }
      }
      
    • Calcular la firma MD5 en Go.

      package main;
      import (
          "crypto/md5"
          "encoding/hex"
          "fmt"
          "io"
          "time"
          "strconv"
      )
      func main() {
          // The string for which you want to calculate the MD5 hash.
          pbkdfPassword := "c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****"
          timeSeconds:= time.Now().Unix()
          key:=pbkdfPassword+"_"+strconv.FormatInt(timeSeconds, 10)
          // Use the MD5 package to calculate the MD5 hash of the string.
          hash := md5.New()
          io.WriteString(hash, key)
          md5Str := hash.Sum(nil)
          // Convert the binary MD5 hash to a hexadecimal string.
          md5StrHex := hex.EncodeToString(md5Str)
          fmt.Println("MD5 of", key, "is", md5StrHex)
      }
  3. Agregue la información de firma MD5 generada como parámetros al enlace.

    Parámetros:

    Parámetro

    Descripción

    Ejemplo

    aliyun_api_key_sign

    La firma MD5, que cambia con el tiempo.

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    La marca de tiempo de la firma. La firma caduca si la diferencia entre esta marca de tiempo y la hora del servidor supera un minuto.

    1726823533

    aliyun_api_key_name

    El nombre del token de cuenta de servicio.

    sa-1---75c7-41ae-94da-**

    aliyun_api_key_org_id

    El identificador de la organización a la que pertenece el token de cuenta de servicio.

    1

    aliyun_api_key_expire_seconds

    La duración, en segundos, durante la cual la sesión sigue siendo válida tras iniciar sesión con la URL firmada.

    Predeterminado: 3600

    Ejemplo:

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key_sign=c3bf89b867cc88df72d507edc4d1****&aliyun_api_key_timestamp=1726823533&aliyun_api_key_name=sa-1-******-*****-75c7-41ae-94da-*******&aliyun_api_key_org_id=1

    Ahora puede generar mediante programación enlaces más seguros a Grafana, sin necesidad de iniciar sesión, lo que evita la exposición del token de cuenta de servicio.

Preguntas frecuentes

  • Al acceder a un panel integrado, la página no se carga y el navegador muestra un error de refused to connect.

    Causa posible: el parámetro allow_embedding no está configurado en el panel integrado. Para configurar el parámetro allow_embedding, consulte Step 1.

  • El panel no muestra datos. La página presenta el mensaje Not found, una notificación de advertencia amarilla Unauthorized y el área del panel aparece vacía.

    En los paneles integrados, este problema ocurre cuando el navegador no logra escribir una cookie. Entre las causas posibles se encuentran:

    • Peticiones entre dominios: si los dominios raíz son distintos, la configuración predeterminada impide que se escriban cookies.

    • El parámetro cookie_samesite tiene el valor none, pero el parámetro cookie_secure está establecido en false.

    • El dominio usa HTTP. Como el parámetro cookie_secure no surte efecto sobre HTTP, debe servir su dominio mediante HTTPS.

    Solución: vuelva a configurar los parámetros de Grafana como se describe en Step 1.

  • Al acceder a un panel mediante un enlace compartido, Grafana muestra el error If you're seeing this Grafana has failed to load its application files. La página sugiere pasos de solución de problemas para configuraciones de proxy inverso, despliegues en subrutas (compruebe root_url o establezca serve_from_sub_path = true), compilaciones locales de desarrollo, reinicio de grafana-server y compatibilidad del navegador.

    Causas posibles:

    • La versión de su navegador está desactualizada.

    • La configuración del navegador bloquea el panel integrado.

      Solución:

      1. Revise la configuración de su navegador para permitir cookies.

      2. Si utiliza Chrome en modo incógnito, permita todas las cookies.

  • Para integrar un panel, ¿debo establecer un periodo de validez corto para una clave de API y rotarla con frecuencia, o conviene configurar una clave de larga duración?

    Configure el periodo de validez según sus requisitos de seguridad. Se recomienda rotar la clave cada tres meses. Si una clave de API se ve comprometida, elimínela de inmediato.

  • ¿Existe un límite en la cantidad de claves de API que puedo crear?

    El código fuente de Grafana no impone un límite estricto. Sin embargo, la interfaz solo muestra un máximo de 100 claves en la página de administración. Para facilitar la gestión, se recomienda usar 100 claves o menos.

  • ¿El sistema elimina automáticamente una clave de API cuando expira su periodo de validez?

    No, las claves de API caducadas no se eliminan de forma automática. Permanecen en el sistema, pero se ocultan de manera predeterminada. En la página API keys de Grafana, haga clic en Include expired keys para mostrarlas. Al habilitar el interruptor Include expired keys, se muestran los registros de las claves de API caducadas, incluidos su nombre, rol y fecha de expiración. Para quitar una clave, haga clic en el botón de eliminación de la fila correspondiente.