All Products
Search
Document Center

Managed Service for Grafana:Bagikan Dasbor Grafana dengan kunci API

Last Updated:Aug 25, 2026

Hasilkan tautan dasbor yang dapat dibagikan dan tidak memerlukan login melalui otentikasi kunci API.

Latar Belakang

  • Pada Grafana asli, akses langsung ke dasbor memerlukan penggunaan snapshot atau mengaktifkan akses anonim. Snapshot bersifat statis dan tidak menampilkan pembaruan data secara real-time, sedangkan akses anonim tanpa daftar putih IP dapat menimbulkan risiko keamanan. Sebaliknya, Managed Service for Grafana memungkinkan Anda menghasilkan tautan dasbor yang dapat dibagikan dan tidak memerlukan login menggunakan otentikasi kunci API.

    • Anda dapat membagikan tautan ini kepada pengguna lain.

    • Pengguna yang memiliki tautan dapat mengakses dasbor tanpa login karena kunci API menyediakan otentikasi.

  • Pada Grafana 10.0.x, fitur kunci API digantikan oleh token akun layanan, tetapi kunci API masih tersedia. Pada Grafana 11.x, kunci API telah sepenuhnya dihapus, dan halaman manajemen kunci API mengembalikan error 404. Pada versi ini, hanya token akun layanan yang menyediakan otentikasi. Untuk informasi selengkapnya, lihat Service accounts.

Langkah 1: Konfigurasikan parameter Grafana

  1. Login ke Konsol Managed Service for Grafana. Di panel navigasi sebelah kiri, klik Workspace Management.

  2. Pada halaman Workspace Management, klik ID ruang kerja yang ingin Anda kelola.

  3. Di panel navigasi sebelah kiri, klik Parameter Settings.

  4. Di daftar parameter sebelah kiri, pilih aliyun, lalu klik Modify Parameters.

  5. Atur parameter api_key_share menjadi true, lalu klik Save and Apply.

    Di kategori konfigurasi aliyun, temukan parameter api_key_share dalam daftar parameter.

  6. Opsional: Untuk mengaktifkan penyematan iframe, konfigurasikan parameter berikut.

    • Untuk penyematan lintas domain

      Domain Anda harus menggunakan HTTPS. Kemudian, atur ketiga parameter security berikut.

      allow_embedding=true
      cookie_samesite=none
      cookie_secure=true
    • Untuk penyematan domain yang sama

      Di bagian security, atur parameter allow_embedding menjadi true untuk mengaktifkan penyematan iframe.

    • Jika Anda menyematkan iframe di instans Grafana lain, sesuaikan parameter panels pada instans tersebut.

      enable_alpha = true
      disable_sanitize_html = true

Langkah 2: Buat kunci API

Langkah-langkah untuk membuat kunci API berbeda antara Grafana 9.0.x dan 10.0.x. Periksa versi Grafana Anda dan ikuti prosedur yang sesuai.

Fitur kunci API telah dihapus pada Grafana 11.x. Sebagai gantinya, buat token akun layanan dengan mengikuti prosedur untuk Grafana 10.0.x.

Jika Anda melakukan upgrade dari 9.0.x ke 10.0.x, kunci API yang dibuat di Grafana 9.0.x masih terlihat di halaman Administration > api keys. Anda dapat mengklik migrate to service account untuk memigrasikannya ke akun layanan. Setelah migrasi, halaman api keys disembunyikan. Kunci API yang ada akan tetap berfungsi.

Grafana 9.0.x

  1. Login ke Konsol Managed Service for Grafana. Di panel navigasi sebelah kiri, klik Workspace Management.

  2. Pada halaman Workspace Management, temukan ruang kerja yang ingin Anda kelola dan klik URL pada kolom URL untuk masuk ke Grafana.

    Catatan

    Anda dapat login ke Grafana dengan akun administrator Grafana dan password yang dikonfigurasi saat membuat ruang kerja. Anda juga dapat mengklik Sign in with Alibaba Cloud untuk login ke Grafana dengan Akun Alibaba Cloud saat ini.

  3. Di pojok kiri atas halaman utama Grafana, klik ikon image.

  4. Di panel navigasi kiri Grafana, pilih Configuration > API keys.

    Catatan

    Diperlukan izin admin untuk mengakses halaman ini.

  5. Klik New API key atau Add API key dan konfigurasikan parameter-parameter berikut.

    Parameter

    Deskripsi

    Key name

    Nama unik untuk kunci API.

    Role

    Atur ke Viewer.

    Time to live

    Periode validitas. Contoh: 60s (60 detik), 10m (10 menit), atau 1d (1 hari).

  6. Klik Add. Di kotak dialog yang muncul, salin dan simpan kunci API tersebut.

    Penting

    Kunci API tidak dapat dilihat lagi setelah kotak dialog ditutup.

    Di kotak dialog API key created, klik tombol Copy di samping bidang Key untuk menyalin kunci API. Kotak dialog tersebut juga menyediakan contoh perintah cURL untuk mengotentikasi permintaan menggunakan Header HTTP Authorization: curl -H "Authorization: Bearer eyJrIjoi..." https://grafana-xxx.grafana.aliyuncs.com/api/dashboards/home.

Grafana 10.0.x

  1. Login ke Konsol Managed Service for Grafana. Di panel navigasi sebelah kiri, klik Workspace Management.

  2. Pada halaman Workspace Management, temukan ruang kerja yang ingin Anda kelola dan klik URL pada kolom URL untuk masuk ke Grafana.

    Catatan

    Anda dapat login ke Grafana dengan akun administrator Grafana dan password yang dikonfigurasi saat membuat ruang kerja. Anda juga dapat mengklik Sign in with Alibaba Cloud untuk login ke Grafana dengan Akun Alibaba Cloud saat ini.

  3. Di pojok kiri atas halaman utama Grafana, klik ikon image.

  4. Di panel navigasi kiri Grafana, pilih Manage > Service Accounts.

    Penting
    • Anda memerlukan izin administrator untuk mengakses menu ini.

    • Akun layanan mengonsumsi satu akun pengguna.

  5. Klik Add service account, masukkan parameter, lalu klik Create.

    Parameter

    Deskripsi

    Display name

    Nama unik untuk akun layanan.

    Role

    Atur ke Viewer.

  6. Di sisi kanan halaman, klik Add service account token dan masukkan parameter.

    Parameter

    Deskripsi

    Display name

    Nama unik untuk token.

    Expiration

    Periode validitas token.

    • No Expiration: Token tidak kedaluwarsa.

    • Set Expiration date: Tentukan tanggal kedaluwarsa.

    Expiration date

    Diperlukan saat Anda memilih Set Expiration date.

  1. Klik Generate token. Di kotak dialog yang muncul, klik Copy to clipboard and close.

Penting

Token tidak dapat dilihat lagi setelah kotak dialog ditutup.

Langkah 3: Hasilkan tautan yang dapat dibagikan

Grafana 9.0.x

  1. Buka dasbor yang ingin Anda bagikan di UI Grafana.

  2. Klik ikon 分享图标 dan dapatkan tautan yang dapat dibagikan dari tab Link.

  3. Tambahkan &aliyun_api_key=<API key value> di akhir tautan. Ganti <API key value> dengan kunci API yang Anda peroleh di Langkah 2.

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJr****WkIwNnN2c0RTSD******
  4. Gunakan tautan yang dapat dibagikan tersebut untuk mengakses Dasbor Grafana tanpa login.

Grafana 10.0.x

  1. Buka dasbor yang ingin Anda bagikan di UI Grafana.

  2. Klik ikon 分享图标 dan dapatkan tautan yang dapat dibagikan dari tab Link.

    Di kotak dialog, Anda dapat mengatur opsi seperti lock time range (yang mengubah rentang waktu relatif menjadi absolut), theme (current, dark, atau light), dan shorten URL. Di bagian bawah, pada bagian Link URL, klik tombol Copy.

  3. Tambahkan &aliyun_api_key=<API key value> di akhir tautan. Pertahankan nama parameter URL aliyun_api_key tetap sama, dan ganti nilainya dengan token akun layanan yang Anda peroleh di Langkah 2.

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJrIjoiWkIwNnN2c0RTSD******
  4. Gunakan tautan yang dapat dibagikan tersebut untuk mengakses Dasbor Grafana tanpa login.

Langkah 4: Hasilkan tautan yang dapat dibagikan dengan keamanan tinggi (opsional)

Tautan yang dapat dibagikan yang dihasilkan di Langkah 3: Hasilkan tautan yang dapat dibagikan memerlukan rotasi kunci API secara berkala untuk mencegah risiko keamanan akibat eksposur kunci. Bagian ini menjelaskan cara menghasilkan tautan yang dapat dibagikan dengan keamanan tinggi untuk kunci API di Grafana 9.0.x dan untuk token akun layanan di Grafana 10.0.x.

Sebelum memulai, Anda harus mengatur parameter waktu proses api_key_share_version menjadi v2.

  1. Login ke Konsol Managed Service for Grafana. Di panel navigasi sebelah kiri, klik Workspace Management.

  2. Pada halaman workspace management, klik ID ruang kerja target. Di panel navigasi sebelah kiri, klik Parameter Settings.

  3. Atur parameter waktu proses untuk api_key_share_version menjadi v2, lalu klik Save and Apply.

Kunci API (Grafana 9.0.x)

  1. Decode Base64 kunci API yang Anda peroleh di Langkah 2: Buat kunci API.

    Base64 adalah metode encoding umum yang digunakan untuk mentransmisikan bytecode 8-bit melalui jaringan. Metode ini menggunakan 64 karakter yang dapat dicetak untuk merepresentasikan data biner.

    • Anda dapat mencari situs web tool umum untuk dekripsi, seperti base64.

    • Decode dalam 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);
          }
      }

      Output:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
    • Decode dalam 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))
      }

      Output:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
  2. Turunkan hash PBKDF2 dari nilai k dalam objek JSON yang telah didekode.

    PBKDF2 (Password-Based Key Derivation Function 2) adalah fungsi turunan kunci yang digunakan untuk menurunkan kunci kriptografi secara aman dari password dan parameter lainnya, seperti salt dan jumlah iterasi. Fungsi ini umum digunakan untuk penyimpanan password dan dirancang agar lebih sulit bagi penyerang untuk memulihkan password teks biasa atau membobol kunci yang diturunkan meskipun database berhasil dikompromikan.

    Anda dapat menurunkan hash dengan berbagai cara. Tabel berikut menjelaskan parameter yang diperlukan.

    Parameter

    Deskripsi

    salt

    Atur ke nama kunci API, yaitu nilai n dari objek JSON yang telah didekode. Dalam contoh ini, nilainya adalah test1.

    iterations

    Atur nilainya ke 10000.

    output length

    Atur nilainya ke 50 byte.

    key size

    Atur nilainya ke 256 bit.

    Output type

    Atur jenisnya ke Hex.

    • Anda dapat mencari tool enkripsi online umum, seperti PBKDF2.

    • Turunkan hash dalam 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();
          }
      }
      

      Output:

      1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**
    • Turunkan hash dalam 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)
      }

      Output:

      1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**
  3. Hitung signature MD5 dari output PBKDF2.

    Algoritma digest pesan MD5 adalah fungsi hash kriptografi yang banyak digunakan yang menghasilkan nilai hash 128-bit (16-byte) untuk memastikan integritas transmisi informasi.

    Buat string yang akan ditandatangani sebagai berikut: <PBKDF2 Password> + "_" + <timestamp Unix saat ini dalam detik>

    Password PBKDF2: 1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**

    Jika waktu sistem saat ini adalah 2024-09-20 17:12:13, timestamp Unix dalam detik adalah 1726823533.

    String yang ditandatangani: 1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**_1726823533

    Anda dapat menghitung signature MD5 dengan berbagai cara:

    • Anda dapat mencari tool enkripsi online umum, seperti MD5.

    • Hitung signature MD5 dalam 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());
              }
          }
      }
      
    • Hitung signature MD5 dalam 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. Tambahkan informasi signature MD5 yang dihasilkan sebagai parameter ke tautan.

    Parameter:

    Parameter

    Deskripsi

    Contoh

    aliyun_api_key_sign

    Signature MD5, yang berubah seiring waktu.

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    Timestamp penandatanganan. Signature kedaluwarsa jika selisih antara timestamp ini dan waktu server melebihi satu menit.

    1726823533

    aliyun_api_key_name

    Nama kunci API.

    test1

    aliyun_api_key_org_id

    ID organisasi tempat kunci API tersebut berada.

    1

    aliyun_api_key_expire_seconds

    Durasi, dalam detik, sesi tetap valid setelah login dengan URL yang ditandatangani.

    Default: 3600

    Contoh:

    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

    Anda sekarang dapat menghasilkan tautan ke Grafana yang lebih aman dan tidak memerlukan login secara programatik, yang juga mencegah eksposur kunci API.

Token akun layanan (Grafana 10.0.x)

  1. Pisahkan token akun layanan dari Langkah 2: Buat token akun layanan, lalu turunkan hash PBKDF2 dari komponennya.

    PBKDF2 (Password-Based Key Derivation Function 2) adalah fungsi turunan kunci yang digunakan untuk menurunkan kunci kriptografi secara aman dari password dan parameter lainnya, seperti salt dan jumlah iterasi. Fungsi ini umum digunakan untuk penyimpanan password dan dirancang agar lebih sulit bagi penyerang untuk memulihkan password teks biasa atau membobol kunci yang diturunkan meskipun database berhasil dikompromikan.

    Pisahkan token akun layanan berdasarkan karakter underscore (_).

    # Contoh token akun layanan:
    Token: glsa_yV9HAOVCjNKkvKoLMiypOc5T0Oov****_4f5ff3ce
    # Setelah dipisahkan:
    Prefix: glsa
    Secret: yV9HAOVCjNKkvKoLMiypOc5T0Oov****
    Salt:   4f5ff3ce

    Anda dapat menurunkan hash dengan berbagai cara. Tabel berikut menjelaskan parameter yang diperlukan.

    Parameter

    Deskripsi

    salt

    Atur ke sufiks token. Dalam contoh ini, nilainya adalah 4f5ff3ce.

    iterations

    Atur nilainya ke 10000.

    output length

    Atur nilainya ke 50 byte.

    key size

    Atur nilainya ke 256 bit.

    Output type

    Atur jenisnya ke Hex.

    • Anda dapat mencari situs web tool umum untuk dekripsi, seperti charsetpbkdf2.

    • Turunkan hash dalam 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();
          }
      }
      

      Output:

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
    • Turunkan hash dalam 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)
      }

      Output:

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
  2. Hitung signature MD5 dari output PBKDF2.

    Algoritma Digest Pesan MD5 adalah fungsi hash kriptografi yang banyak digunakan yang dapat menghasilkan nilai hash 128-bit (16-byte) yang digunakan untuk memastikan integritas dan konsistensi transmisi informasi.

    Buat string yang akan ditandatangani sebagai berikut: <PBKDF2 Password> + "_" + <timestamp Unix saat ini dalam detik>

    Password PBKDF2: c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****

    Jika waktu sistem saat ini adalah 2024-09-20 17:12:13, timestamp Unix dalam detik adalah 1726823533.

    String yang ditandatangani: c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****_1726823533

    Anda dapat menghitung signature MD5 dengan berbagai cara:

    • Anda dapat mencari tool enkripsi online yang umum digunakan, seperti MD5.

    • Hitung signature MD5 dalam 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());
              }
          }
      }
      
    • Hitung signature MD5 dalam 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. Tambahkan informasi signature MD5 yang dihasilkan sebagai parameter ke tautan.

    Parameter:

    Parameter

    Deskripsi

    Contoh

    aliyun_api_key_sign

    Signature MD5, yang berubah seiring waktu.

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    Timestamp penandatanganan. Signature kedaluwarsa jika selisih antara timestamp ini dan waktu server melebihi satu menit.

    1726823533

    aliyun_api_key_name

    Nama token akun layanan.

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

    aliyun_api_key_org_id

    ID organisasi tempat token akun layanan tersebut berada.

    1

    aliyun_api_key_expire_seconds

    Durasi, dalam detik, sesi tetap valid setelah login dengan URL yang ditandatangani.

    Default: 3600

    Contoh:

    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

    Anda sekarang dapat menghasilkan tautan ke Grafana yang lebih aman dan tidak memerlukan login secara programatik, mencegah eksposur token akun layanan.

FAQ

  • Saat mengakses dasbor yang disematkan, halaman gagal dimuat dan browser menampilkan error refused to connect.

    Penyebab kemungkinan: Parameter allow_embedding belum diatur untuk dasbor yang disematkan. Untuk mengonfigurasi parameter allow_embedding, lihat Langkah 1.

  • Dasbor tidak menampilkan data apa pun. Halaman menampilkan pesan Not found dan notifikasi peringatan kuning Unauthorized, serta area dasbor kosong.

    Untuk dasbor yang disematkan, masalah ini dapat terjadi jika browser tidak dapat menulis cookie. Penyebab kemungkinan meliputi:

    • Permintaan lintas domain: Jika domain root berbeda, konfigurasi default mencegah penulisan cookie.

    • Parameter cookie_samesite diatur ke none, tetapi parameter cookie_secure diatur ke false.

    • Domain menggunakan HTTP. Karena parameter cookie_secure tidak efektif melalui HTTP, Anda harus menyajikan domain Anda melalui HTTPS.

    Solusi: Konfigurasi ulang parameter Grafana seperti yang dijelaskan di Langkah 1.

  • Saat saya mengakses dasbor melalui tautan bersama, Grafana menampilkan error If you're seeing this Grafana has failed to load its application files. Halaman tersebut menyarankan langkah troubleshooting untuk konfigurasi reverse proxy, penerapan sub-path (periksa root_url atau atur serve_from_sub_path = true), build pengembangan lokal, restart grafana-server, dan kompatibilitas browser.

    Penyebab kemungkinan:

    • Versi browser Anda sudah usang.

    • Pengaturan browser Anda memblokir dasbor yang disematkan.

      Solusi:

      1. Periksa pengaturan browser Anda untuk mengizinkan cookie.

      2. Jika Anda menggunakan mode penyamaran Chrome, izinkan semua cookie.

  • Untuk penyematan dasbor, apakah saya harus mengatur periode validitas pendek untuk kunci API dan sering melakukan rotasi, atau mengonfigurasi kunci berumur panjang?

    Anda dapat mengonfigurasi periode validitas berdasarkan kebutuhan keamanan Anda. Kami menyarankan melakukan rotasi kunci setiap tiga bulan. Jika kunci API dikompromikan, segera hapus.

  • Apakah ada batasan jumlah kunci API yang dapat saya buat?

    Kode sumber Grafana tidak memberlakukan batasan keras. Namun, UI hanya dapat menampilkan maksimal 100 kunci di halaman manajemen. Untuk kemudahan manajemen, kami menyarankan menggunakan 100 kunci atau kurang.

  • Apakah sistem secara otomatis menghapus kunci API saat periode validitasnya berakhir?

    Tidak, kunci API yang kedaluwarsa tidak dihapus secara otomatis. Kunci tersebut tetap berada di sistem tetapi disembunyikan secara default. Di halaman API keys di Grafana, Anda dapat mengklik Include expired keys untuk menampilkannya. Mengaktifkan toggle Include expired keys akan menampilkan catatan kunci API yang kedaluwarsa, termasuk nama, role, dan waktu kedaluwarsanya. Untuk menghapus kunci, klik tombol hapus di baris yang sesuai.