すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:API キーを使用して共有可能な Grafana ダッシュボードリンクを生成する

最終更新日:May 29, 2025

このトピックでは、API キーを使用して、Grafana にログインすることなくアクセスできる共有可能な Grafana ダッシュボードリンクを生成する方法について説明します。

背景情報

認証なしで Grafana ダッシュボードにアクセスするには、スナップショットまたは匿名モードを使用できます。

  • スナップショットは、生成時のポイントインタイムデータをキャプチャし、後続のデータが時間の経過とともに更新されないようにします。

  • 匿名モードでは、セキュリティリスクを軽減するために IP ホワイトリストが必要です。

ただし、Managed Service for Grafana は、API キー(または Grafana V10.0.x 以降のサービスアカウントトークン)を介して共有可能なダッシュボードリンクの生成をサポートしています。これらのリンクを使用すると、認証はキー/トークンによって処理されるため、他のユーザーはログインせずにダッシュボードを表示できます。

手順 1:Grafana パラメータを構成する

  1. ARMS コンソール にログインします。左側のナビゲーションウィンドウで、[Managed Service For Grafana] > [ワークスペース管理] を選択します。

  2. [ワークスペース管理] ページで、管理するワークスペースの ID をクリックします。

  3. 左側のナビゲーションウィンドウで、[パラメータ設定] をクリックします。

  4. 左側の aliyun パラメータリストで、[パラメータの変更] をクリックします。

  5. [api_key_share] パラメーターを [true] に設定し、[保存して適用] をクリックします。

  6. オプション。<iframe> タグを使用してダッシュボードリンクを Web ページに埋め込む場合は、シナリオに基づいて関連パラメータを変更します。

    • リンクと Web ページが異なるドメイン名にある場合のクロスドメイン埋め込み:

      リンクを HTTPS URL として構成し、security で次の 3 つのパラメータを変更します。

      allow_embedding=true
      cookie_samesite=none
      cookie_secure=true

      跨域情况参数修改

    • リンクと Web ページが同じドメイン名を共有する場合の同一ドメイン埋め込み:

      securityallow_embedding パラメータの値を true に変更して、<iframe> タグでの埋め込みを有効にします。

    • 別の Grafana インスタンスに埋め込むために <iframe> タグを使用するには、インスタンスの panels パラメータの値を変更します。

      enable_alpha = true
      disable_sanitize_html = true

手順 2:API キーを作成する

API キーの作成は、Grafana 9.0.x と 10.0.x で異なります。続行する前に、Grafana のバージョンを確認してください。

9.0.x から 10.0.x へのアップグレード後:

  • Grafana 9.0.x の既存の API キーは、[API キー] ページに引き続き表示されます。

  • [サービスアカウントに移行] をクリックして、API キーをサービスアカウントに移行します。

  • [API キー] ページは非表示になりますが、移行が完了すると、レガシーキーは引き続き機能します。

Grafana 9.0.x

  1. ARMS コンソール にログインします。左側のナビゲーションウィンドウで、[Managed Service For Grafana] > [ワークスペース管理] を選択します。

  2. [ワークスペース管理] ページで、管理するワークスペースを見つけ、[URL] 列の URL をクリックして Grafana に移動します。

    説明

    Grafana の管理者アカウントとワークスペースの作成時に設定したパスワードを使用して、Grafana にログインできます。 [Alibaba Cloud でサインイン] をクリックして、現在の Alibaba Cloud アカウントで Grafana にログインすることもできます。

  3. Grafana ホームページの左上隅にある image アイコンをクリックします。

  4. Grafana インターフェイスの左側のナビゲーションウィンドウで、[構成] > [APIキー] を選択します。

    説明

    API キー ページにアクセスするには、管理者権限が必要です。

  5. [新しい API キー] または [API キーを追加] をクリックし、次のパラメータを構成します。

    パラメータ

    説明

    [キー名]

    API キーの名前。名前は既存の API キーと同じにすることはできません。

    [ロール]

    [閲覧者] を選択します。

    [有効期間]

    API キーの有効期間。例:60s(60 秒)、10m(10 分)、1d(1 日)。

  6. [追加] をクリックします。表示されるダイアログボックスで、API キーの値を取得して保存します。

    重要

    ダイアログ ボックスを閉じると、API キーの値を再度表示することはできません。

    API Key值

Grafana 10.0.x

  1. ARMS コンソール にログインします。左側のナビゲーションウィンドウで、[Managed Service For Grafana] > [ワークスペース管理] を選択します。

  2. [ワークスペース管理] ページで、管理するワークスペースを見つけ、[URL] 列の URL をクリックして Grafana に移動します。

    説明

    Grafana の管理者アカウントとワークスペースの作成時に設定したパスワードを使用して、Grafana にログインできます。また、[Alibaba Cloud でサインイン] をクリックして、現在の Alibaba Cloud アカウントで Grafana にログインすることもできます。

  3. Grafana ホームページの左上隅にある image アイコンをクリックします。

  4. 左側のナビゲーションウィンドウで、[管理] > [サービスアカウント] を選択します。

    重要
    • [サービスアカウント] ページにアクセスするには、管理者権限が必要です。

    • サービスアカウントを作成すると、使用可能なユーザーアカウント スロット の 1 つが使用されます。

  5. [サービスアカウントトークンを追加] をクリックし、次のパラメータを構成して、[作成] をクリックします。

    パラメータ

    説明

    [表示名]

    サービスアカウントの名前。名前は既存のサービスアカウントと同じにすることはできません。

    [ロール]

    [閲覧者] を選択します。

  6. [サービスアカウントトークンを追加] をクリックし、次のパラメータを構成します。

    パラメータ

    説明

    [表示名]

    API キーの名前。名前は既存の API キーと同じにすることはできません。

    [有効期限]

    API キーの有効期間。有効な値:

    • [有効期限なし]

    • [有効期限を設定]

    [有効期限]

    [有効期限][有効期限を設定] に設定した場合は、有効期間の有効期限を設定する必要があります。

  1. [トークンの生成] をクリックします。表示されるダイアログボックスで、[クリップボードにコピーして閉じる] をクリックします。

重要

ダイアログボックスを閉じると、API キーの値を再度表示することはできません。

手順 3:共有可能なダッシュボードリンクを生成する

Grafana 9.0.x

  1. Grafana インターフェイスで、共有するダッシュボードのページに移動します。

  2. 分享图标 アイコンをクリックします。表示されるダイアログボックスで、[リンク] タブをクリックします。[リンク] タブで、ダッシュボードの共有可能なリンクを取得します。

    Grafana大盘分享链接

  3. リンクの末尾に &aliyun_api_key=<API key value> を追加します。<API key value> は、手順 2 で取得したサービスアカウントトークンを示します。

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJr****WkIwNnN2c0RTSD******
  4. サービスアカウントトークンを含む共有可能なリンクを使用して、Grafana にログインせずにダッシュボードにアクセスします。

Grafana 10.0.x

  1. Grafana インターフェイスで、共有するダッシュボードのページに移動します。

  2. 分享图标 アイコンをクリックします。表示されるダイアログボックスで、[リンク] タブをクリックします。[リンク] タブで、ダッシュボードの共有可能なリンクを取得します。

  3. リンクの末尾に &aliyun_api_key=<API key value> を追加します。<API key value> は、手順 2 で取得したサービスアカウントトークンを示します。

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJrIjoiWkIwNnN2c0RTSD******
  4. サービスアカウントトークンを含む共有可能なリンクを使用して、Grafana にログインせずにダッシュボードにアクセスします。

(オプション) 手順 4: セキュリティ強化された共有可能なリンクを生成する

ステップ 3:共有可能なダッシュボードリンクを生成する で生成された共有リンクの API キーを定期的に変更する必要があります。このステップでは、API キーとサービスアカウントトークンのシナリオでセキュリティの高い共有可能なリンクを生成する方法について説明します。

.最初に、api_key_share_version のランタイムパラメータを v2 に変更します。

  1. ARMS コンソール にログインします。左側のナビゲーションウィンドウで、[Managed Service For Grafana] > [ワークスペース管理] を選択します。

  2. ワークスペース管理パラメーター設定 ページで、ワークスペース ID をクリックします。表示されるページの左側のナビゲーションウィンドウで、 をクリックします。

  3. api_key_share_version パラメータを v2 に設定し、[保存して適用] をクリックします。14.jpg

API キー(Grafana 9.0.x)

  1. 手順 2:API キーを作成する で取得した API キーを Base64 で復号化します。

    Base64 は、8 ビット バイトコード を送信するために Web で使用される一般的なエンコード方式です。64 個の印字可能な文字を使用して バイナリ データを表す手法です。

    • base64 などの一般的なオンラインツールを復号化に使用します。

    • Java で API キーを復号化します。

      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);
          }
      }

      出力:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
    • Go で API キーを復号化します。

      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))
      }

      出力:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
  2. 上記で取得した復号化された API キー値を PBKDF2 を使用して暗号化します。

    Password-Based Key Derivation Function 2(PBKDF2)は、ユーザーが提供したパスワードと、ソルトや反復回数などの追加パラメータから暗号化キーを安全に派生するために使用されるパスワードベースのキー派生関数です。主にユーザーパスワードを保存する必要があるシナリオで使用され、データベースが侵害された場合でも、攻撃者がユーザーのプレーンテキストパスワードを直接取得したり、派生キーを簡単にクラックしたりすることを困難にすることを目的としています。

    複数の暗号化方式が利用可能です。次の表に暗号化パラメータを示します。

    パラメータ

    説明

    salt

    API キーの名前(つまり、上記で復号化された n の値)を入力します。この例では、値を test1 に設定します。

    iteration

    値を 10000 に設定します。

    出力長

    値を 50 に設定します。

    キーサイズ

    値を 256 に設定します。

    出力タイプ

    値を 16 進数に設定します。

    • df2 などの一般的なオンラインツールを暗号化に使用します。

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

      出力:PBKDF2 パスワード

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

      出力:PBKDF2 パスワード

      1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****
  3. PBKDF2 を使用して暗号化された情報に基づいて、MD5 ダイジェスト署名パラメータを構築します。

    MD5 メッセージダイジェストアルゴリズム は、広く使用されている 暗号学的ハッシュ関数 で、128 ビット(16 バイト)の ハッシュ値 を生成します。これは、送信される情報 の整合性と一貫性を確保するために設計されています。

    暗号化されるコンテンツは、<PBKDF2 パスワード> + "_" + <現在のシステム時刻(秒単位の整数)> で構成されます。

    例:

    PBKDF2 パスワードが 1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**** の場合

    現在のシステム時刻が 2024-09-20 17:12:13 の場合、エポックからの正確な時刻(秒単位)は 1726823533 になります。

    したがって、MD5 署名を生成するための完全な情報は、1e5b****80184 e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****_1726823533 になります。

    MD5 署名を生成する方法:

    • MD5 などの一般的なオンラインツールを暗号化に使用します。

    • Java で MD5 ハッシュを実装します。

      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());
              }
          }
      }
      
    • Go で MD5 ハッシュを実装します。

      package main
       
      import (
          "crypto/md5"
          "encoding/hex"
          "fmt"
          "io"
          "time"
          "strconv"
      )
       
      func main() {
          // MD5 でハッシュする必要がある文字列。
          pbkdfPassword := "1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****"
          timeSeconds:= time.Now().Unix()
          key:=pbkdfPassword+"_"+strconv.FormatInt(timeSeconds, 10)
       
          // md5 パッケージを使用して文字列の MD5 ハッシュを計算します。
          hash := md5.New()
          io.WriteString(hash, key)
          md5Str := hash.Sum(nil)
       
          // バイナリ MD5 値を 16 進数文字列に変換します。
          md5StrHex := hex.EncodeToString(md5Str)
       
          fmt.Println("MD5 of", key, "is", md5StrHex)
      }
  4. 生成された MD5 署名に基づいて URL パラメータを構築します。

    次の表にパラメータを示します。

    パラメータ

    説明

    aliyun_api_key_sign

    MD5 署名。これは時間の経過とともに変化します。

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    署名時刻。署名時刻とシステム時刻の差が 1 分を超えると、署名は期限切れになり無効になります。

    1726823533

    aliyun_api_key_name

    API キーの名前。

    test1

    aliyun_api_key_org_id

    API キーの組織 ID。

    1

    aliyun_api_key_expire_seconds

    ログイン後 MD5 署名が期限切れになるまでの時間。単位:秒。

    3600(デフォルト)

    例:

    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

    このようにして、プログラムコードに基づいてより安全なパスワードなしのログインリンクを Grafana に毎回動的に生成し、API キーの漏洩を回避できます。

サービスアカウントトークン(Grafana 10.0.x)

  1. 手順 2: API キーを作成する で作成した API キー (Grafana 10.0.x 以降ではサービスアカウントトークンと呼ばれます) を PBKDF2 を使用して分割および暗号化します。

    Password-Based Key Derivation Function 2(PBKDF2)は、ユーザーが提供したパスワードと、ソルトや反復回数などの追加パラメータから暗号化キーを安全に派生するために使用されるパスワードベースのキー派生関数です。主にユーザーパスワードを保存する必要があるシナリオで使用され、データベースが侵害された場合でも、攻撃者がユーザーのプレーンテキストパスワードを直接取得したり、派生キーを簡単にクラックしたりすることを困難にすることを目的としています。

    サービスアカウントトークンをアンダースコア(_)で分割します。

    # 次のサービスアカウントトークンを例として使用します。
    トークン:glsa_yV9HAOVCjNKkvKoLMiypOc5T0Oov****_4f5ff3ce
    # 分割後、次のようになります。
    プレフィックス:glsa
    シークレット:yV9HAOVCjNKkvKoLMiypOc5T0Oov****
    ソルト:4f5ff3ce

    複数の暗号化方式が利用可能です。次の表に暗号化パラメータを示します。

    パラメータ

    説明

    salt

    トークンサフィックスを入力します。この例では、値を 4f5ff3ce に設定します。

    iteration

    値を 10000 に設定します。

    出力長

    値を 50 に設定します。

    キーサイズ

    値を 256 に設定します。

    出力タイプ

    値を 16 進数に設定します。

    • charsetpbkdf2 などの一般的なオンラインツールを復号化に使用します。

    • Java で API キーを復号化します。

      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();
          }
      }
      

      出力:PBKDF2 パスワード

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

      出力:PBKDF2 パスワード

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
  2. PBKDF2 を使用して暗号化された情報に基づいて、MD5 ダイジェスト署名パラメータを構築します。

    MD5 メッセージダイジェストアルゴリズム は、広く使用されている 暗号学的ハッシュ関数 で、128 ビット(16 バイト)の ハッシュ値 を生成します。これは、送信される情報 の整合性と一貫性を確保するために設計されています。

    暗号化されるコンテンツは、<PBKDF2 パスワード> + "_" + <現在のシステム時刻(秒単位の整数)> で構成されます。

    例:

    PBKDF2 パスワードが 1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**** の場合

    現在のシステム時刻が 2024-09-20 17:12:13 の場合、エポックからの正確な時刻(秒単位)は 1726823533 になります。

    したがって、MD5 署名を生成するための完全な情報は、1e5b****80184 e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****_1726823533 になります。

    MD5 署名を生成する方法:

    • MD5 などの一般的なオンラインツールを暗号化に使用します。

    • Java で MD5 ハッシュを実装します。

      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());
              }
          }
      }
      
    • Go で MD5 ハッシュを実装します。

      package main
       
      import (
          "crypto/md5"
          "encoding/hex"
          "fmt"
          "io"
          "time"
          "strconv"
      )
       
      func main() {
          // MD5 でハッシュする必要がある文字列。
          pbkdfPassword := "1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****"
          timeSeconds:= time.Now().Unix()
          key:=pbkdfPassword+"_"+strconv.FormatInt(timeSeconds, 10)
       
          // md5 パッケージを使用して文字列の MD5 ハッシュを計算します。
          hash := md5.New()
          io.WriteString(hash, key)
          md5Str := hash.Sum(nil)
       
          // バイナリ MD5 値を 16 進数文字列に変換します。
          md5StrHex := hex.EncodeToString(md5Str)
       
          fmt.Println("MD5 of", key, "is", md5StrHex)
      }
  3. 生成された MD5 署名に基づいて URL パラメータを構築します。

    次の表にパラメータを示します。

    パラメータ

    説明

    aliyun_api_key_sign

    MD5 署名。これは時間の経過とともに変化します。

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    署名時刻。署名時刻とシステム時刻の差が 1 分を超えると、署名は期限切れになり無効になります。

    1726823533

    aliyun_api_key_name

    サービスアカウントトークンの名前。

    test1

    aliyun_api_key_org_id

    サービスアカウントトークンの組織 ID。

    1

    aliyun_api_key_expire_seconds

    ログイン後 MD5 署名が期限切れになるまでの時間。単位:秒。

    3600(デフォルト)

    例:

    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

    このようにして、プログラムコードに基づいてより安全なパスワードなしのログインリンクを Grafana に毎回動的に生成し、サービスアカウントトークンの漏洩を回避できます。

FAQ

  • 共有可能なリンクを使用してダッシュボードにアクセスしたときに次のエラーが報告された場合はどうすればよいですか?访问大盘报错1

    考えられる原因:<iframe> タグを使用してダッシュボードリンクを Web ページに埋め込んだときに、allow_embedding パラメータを構成していません。allow_embedding パラメータの構成方法については、このトピックの 手順 1 を参照してください。

  • ダッシュボードにデータが表示されないのはなぜですか?无法显示大盘内容

    <iframe> タグを使用してダッシュボードリンクを Web ページに埋め込んだ場合、次の考えられる原因により Cookie を書き込むことができません。

    • リンクと Web ページが異なるドメイン名にある。この場合、デフォルトでは Cookie を書き込むことができません。

    • cookie_samesite パラメータが none に設定されていますが、cookie_secure パラメータが false に設定されています。

    • リンクは HTTP URL として構成されています。ただし、cookie_secure パラメータは HTTP では有効にならないため、HTTP URL はサポートされていません。

    Grafana パラメータを再構成して問題をトラブルシューティングできます。詳細については、このトピックの 手順 1 を参照してください。

  • 共有可能なリンクを使用してダッシュボードにアクセスしたときに次のエラーが報告された場合はどうすればよいですか?页面报错2

    考えられる原因:

    • ブラウザのバージョンが古い。

    • <iframe> タグを使用してダッシュボードリンクを Web ページに埋め込んだ場合、ブラウザの構成が無効です。

      解決策:

      1. Cookie の構成を表示し、Cookie を有効にします。

      2. Chrome を使用している場合は、シークレットモードですべての Cookie を有効にする必要があります。

  • API キーを使用してダッシュボードリンクを Web ページに埋め込む場合、API キーを 1 回だけ使用するために短い有効期間を指定する必要がありますか、それともログイン不要のエクスペリエンスのために API キーに長い有効期間を指定する必要がありますか?

    セキュリティ要件に基づいて API キーの有効期間を指定できます。セキュリティを確保するために、3 か月ごとに API キーを変更することをお勧めします。API キーが漏洩した場合は、キーを削除して不正アクセスを防ぐことができます。

  • API キーを無制限に作成できますか?

    作成できる API キーの数に制限はありません。ただし、Grafana インターフェイスには一度に最大 100 個の API キーしか表示されません。API キーの数を 100 以下にすることをお勧めします。

  • API キーの有効期限が切れると、システムは API キーを自動的に削除しますか?

    いいえ、システムは期限切れの API キーのデータを保持します。新しい API キーのためのスペースを確保するために、期限切れの API キーを手動で削除できます。デフォルトでは、期限切れの API キーは Grafana インターフェイスに表示されません。期限切れの API キーを表示するには、[期限切れのキーを含める] をオンにします。その後、期限切れの API キーを削除できます。显示失效key