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

Key Management Service:ACKコンテナ環境にKMS Agentをデプロイしてシークレットを取得する

最終更新日:Jun 23, 2025

KMS は、ACK クラスタに KMS Agent をサイドカーとしてデプロイすることをサポートしています。Agent は RRSA メカニズムを介して KMS からシークレット値を取得し、ビジネスアプリケーションはローカルインターフェイスを介して KMS シークレットを取得します。このアプローチにより、SDK の統合が不要になり、アプリケーションの変更コストが削減され、統合標準が統一されます。多くのアプリケーションが KMS にアクセスする必要があるシナリオに適しています。このトピックでは、ACKコンテナ環境にKMS Agentをデプロイしてシークレットを取得する方法について説明します。

前提条件

このベストプラクティスについて学習する前に、次の概念をよく理解しておいてください。

  • KMS Agent とは: KMS Agent は、KMS サービスからシークレット値を取得してメモリにキャッシュする役割を担う HTTP プロキシサービスです。アプリケーションは、HTTP リクエストを介して KMS Agent からシークレット値を取得します。

  • RRSA を介して ServiceAccount の RAM 権限を構成して Pod 権限の隔離を実装する: アプリケーションが Alibaba Cloud ACK クラスタにデプロイされている場合は、RRSA (RAM Roles for Service Accounts) 機能を使用して、コンテナクラスタ内で隔離された RAM ロールの機能を実装できます。各アプリケーションは独立した RAM ロールを引き受けて、Alibaba Cloud OpenAPI にアクセスできます。

シナリオ

アクセス資格情報として RRSA を使用して ACK コンテナ環境に KMS Agent をデプロイしてシークレットを取得することは、次のビジネスシナリオに適しています。

  • 企業は「最後の鍵」の問題を解決する必要があります。

    企業は機密資格情報を Alibaba Cloud KMS でホストしてセキュリティを強化します。ただし、KMS 自体にアクセスするには認証が必要であるため、クラウドサービスへのアクセスに長期間固定の AccessKey に依存すると、KMS アクセス資格情報が新たな脆弱性となるセキュリティリスクが生じる可能性があります。

    Alibaba Cloud ACK クラスタで RRSA 機能を有効にすることで、異なる Pod に異なる RAM ロールを関連付けることができます。異なる Pod 内のアプリケーションは、独立した RAM ロールを引き受けて一時的な資格情報を使用してクラウド リソースにアクセスできます。これにより、アプリケーションの最小権限の原則が実装され、AccessKey なしで Alibaba Cloud OpenAPI にアクセスできるようになり、AccessKey の漏洩を防ぎます。

  • 企業は、異なるアプリケーション間で資格情報へのアクセス権限を隔離する必要があります。

    たとえば、権限の拡大や不正な資格情報アクセスを防ぐために、同じアプリケーションのテスト環境と本番環境間、および異なるアプリケーション間で権限の隔離が必要です。

    RRSA は RAM ポリシーに基づいています。異なるアプリケーションは異なる名前空間とサービスアカウントで実行され、異なる RAM ロールにバインドされます。RAM ロールに異なる権限を付与することで、異なるアプリケーションに対して KMS シークレットへのアクセス制御を実装できます。

  • アプリケーションと KMS を統合するための開発コストを削減します。

    KMS にアクセスする必要があるアプリケーションが少数の場合、SDK を統合できます。ただし、数百または数千のアプリケーションを持つ中規模から大規模の企業の場合、各アプリケーションを SDK と統合するように変更し、一貫した標準に従って障害復旧とキャッシュを設計することは非常に困難です。さらに、中国本土の企業ではセキュリティ、運用、開発チームが通常別々であるため、既存のオープンソースの外部シークレットアプローチはあまり適していません。統合 DevOps モデルの方が適しています。

    この場合、KMS Agent を使用してシークレットを取得できます。ACK コンテナクラスタ環境では、KMS Agent はビジネスコンテナと同じ Pod 内でサイドカーコンテナとして実行されます。ACK クラスタで RRSA が有効になっている場合、KMS Agent はアクセス資格情報を設定することなく、RRSA RamRole ID を使用して KMS に自動的にアクセスします。Agent はリモート KMS からシークレットを取得してメモリにキャッシュし、ビジネスアプリケーションは Agent からシークレットを取得します。

ソリューションアーキテクチャ

次の図は、ユーザーが dev と prod の 2 つのアプリケーションを持ち、ACK コンテナ環境に KMS Agent をデプロイしてシークレットを取得する例を示しています。異なる環境のアプリケーションは、対応する KMS シークレットにのみアクセスできます。

image

制限事項

  • ACK クラスタは、ACK マネージドクラスター、ACK 専用クラスター、ACK 登録クラスター、および ACK Serverless クラスタをサポートしています。

  • ACK クラスタと KMS インスタンスは同じリージョンにある必要があります。

プロシージャ

次の手順では、ビジネスアプリケーションが KMS Agent を介してシークレットを取得できるように ACK、RAM、および KMS を構成する方法を示します。開発者は KMS でシークレットを作成し、アプリケーションでローカルに取得するだけで済みます。残りの構成は、運用チームとセキュリティチームによって事前に設定されます。プロセス全体を通して、開発者はビジネスコードに SDK を統合したり、アプリケーションが KMS にアクセスするための認証、承認、キャッシュ、または障害復旧について心配する必要はありません。

image

ステップ 1: KMS Agent 実行可能ファイルを作成する

  1. Golang 環境をインストールします。詳細な操作については、「Go インストールガイド」をご参照ください。

  2. ソースコードと依存関係をダウンロードします。

    1. Git ウェブサイト にアクセスして、Git ツールをダウンロードしてインストールします。

    2. 次のコマンドを実行して、ソースコードと依存関係をダウンロードします。

      git clone https://github.com/aliyun/alibabacloud-kms-agent
      go mod download
  3. プロジェクトのルートディレクトリで go build . コマンドを実行して、実行可能ファイルをコンパイルします。デフォルトのファイル名は alibabacloud-kms-agent で、プロジェクトのルートディレクトリに保存されます。

    コンパイル環境とデプロイ環境が同じ場合は、go build . コマンドを実行するだけです。コンパイル環境とデプロイ環境が異なる場合は、次のコマンドを参考にしてクロスプラットフォームコンパイルを行い、64 ビット実行可能ファイルを生成します。

    コンパイル環境

    デプロイ環境が Mac の場合

    デプロイ環境が Linux の場合

    デプロイ環境が Windows の場合

    Mac

    go build .

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build .

    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .

    Linux

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build .

    go build .

    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .

    Windows

    SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build .

    SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build .

    go build .

  4. プロジェクトのルートディレクトリで、実行可能ファイル alibabacloud-kms-agent が存在するかどうかを確認します。image

ステップ 2: ACK RRSA を有効にして、特定のシークレットへのアクセスを承認する

  1. ACK RRSA 機能を有効にします。

    クラスタ作成中に有効にする

    ACK マネージドクラスター または ACK Edge クラスタ を作成する際に、[クラスタ構成] ステップの [詳細オプション (オプション)] セクションで、[RRSA OIDC] の横にある [有効にする] をクリックします。

    image

    クラスタ作成後に有効にする

    1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

    2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、[クラスタ情報] をクリックします。

    3. [基本情報] タブの [セキュリティと監査] セクションで、[RRSA OIDC] の横にある [有効にする] をクリックします。image

    4. [RRSA を有効にする] ダイアログボックスで、[確認] をクリックします。

      [基本情報] セクションで、クラスタの状態が [更新中] から [実行中] に変わると、クラスタの RRSA 機能が有効になります。

  2. クラスタの詳細ページを開きます。[基本情報] タブの [セキュリティと監査] セクションで、RRSA OIDC の右側の [有効] ステータスにカーソルを合わせて、プロバイダの URL リンクと ARN 情報を表示します。image

  3. [ID プロバイダ] の信頼できるエンティティを持つ RAM ロールを作成します。

    1. Alibaba Cloud アカウントを使用して、RAM コンソール にログインします。

    2. 左側のナビゲーションウィンドウで、[ID 管理] > > [ロール] を選択します。[ロール] ページで、[ロールの作成] をクリックします。

    3. [ロールの作成] パネルで、信頼できるエンティティタイプとして [ID プロバイダ] を選択し、[エディタの切り替え] をクリックします。image

    4. [ロールの作成] ページの [ビジュアルエディタ] セクションで、次のロール情報を構成し、[OK] をクリックします。

      構成項目

      説明

      [効果]

      [許可] を選択します。

      [プリンシパル]

      ID プロバイダを選択します。

      • ID プロバイダタイプ: OIDC を選択します。

      • ID プロバイダ: RRSA を有効にすると、ACK クラスタは ack-rrsa-<cluster_id> という命名形式でデフォルトの ID プロバイダを作成します。<cluster_id> にクラスタの ID を指定します。

      [アクション]

      デフォルトのままにします。つまり、sts:AssumeRole を選択します。

      [条件]

      デフォルトの [oidc:iss] 条件と [oidc:aud] 条件に基づいて新しい条件を追加します。

      • 条件キー: [oidc:sub] を選択します。

      • 演算子: [StringEquals] を選択します。

      • 条件値: [system:serviceaccount:<namespace>:<serviceAccountName>]

        • <namespace>: アプリケーションの名前空間を指定します。

        • <serviceAccountName>: サービスアカウントの名前。

        この例では、system:serviceaccount:rrsa-dev:dev-sa を使用します。ここで、rrsa-dev は次のステップで作成する必要がある Kubernetes 名前空間、dev-sa は次のステップで作成する必要がある Kubernetes サービスアカウントです。

    5. [ロールの作成] ダイアログボックスで、ロール名を設定し、[OK] をクリックします。この例では、ロール名は dev-role-for-rrsa です。

    6. dev-role-for-rrsa RAM ロールの信頼ポリシーを表示します。

      このポリシーにより、特定のサービスアカウントは、OIDC 認証条件を満たした後、Alibaba Cloud RRSA (RAM Roles for Service Accounts) を介して RAM ロールを引き受けることができます。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": [
                  "sts.aliyuncs.com"
                ],
                "oidc:iss": [
                  "https://oidc-ack-cn-hongkong.oss-cn-hongkong.aliyuncs.com/cf01******"
                ],
                "oidc:sub": [
                  "system:serviceaccount:rrsa-dev:dev-sa"
                ]
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "acs:ram::5269************:oidc-provider/ack-rrsa-cf01******"
              ]
            }
          }
        ],
        "Version": "1"
      }
  4. 権限ポリシーを作成し、RAM ロールに付与します。

    1. この例では、権限ポリシー名は dev-role-for-rrsa-kms-policy で、ポリシーの内容は env:dev タグが付いたシークレットへのアクセスのみを許可します。image

      権限ポリシーの内容は次のとおりです。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "kms:Decrypt",
                      "kms:GetSecretValue"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEqualsIgnoreCase": {
                          "kms:tag/env": [
                              "dev"
                          ]
                      }
                  }
              }
          ]
      }
    2. dev-role-for-rrsa-kms-policy 権限ポリシーを dev-role-for-rrsa ロールに付与します。image

ステップ 3: ACK で名前空間とサービスアカウントを作成する

名前空間は ACK クラスタを論理的に隔離された仮想空間に分割し、開発、テスト、本番などの環境を分離するために使用されます。異なる名前空間のアプリケーションは、デフォルトでは互いのリソースにアクセスできません。これにより、RAM ロールのバインディングに物理的な境界が提供されます。サービスアカウントは Pod の ID を提供し、RRSA メカニズムを介して RAM ロールと動的にバインドします。

  1. YAML ファイルを使用して名前空間を作成します。

    この例では、名前空間名は rrsa-dev、YAML ファイル名は namespace.yaml です。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: rrsa-dev
  2. 次のコマンドを実行して、ACK クラスタに rrsa-dev という名前の名前空間を作成します。

    kubectl apply -f namespace.yaml

    名前空間が正常に作成されたかどうかを確認します。

    kubectl get namespaces

    出力に rrsa-dev が含まれている場合、作成は成功です。

  3. YAML ファイルを使用してサービスアカウントを作成します。

    この例では、サービスアカウント名は dev-sa、YAML ファイル名は serviceaccount.yaml です。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dev-sa
      namespace: rrsa-dev
  4. 次のコマンドを実行して、rrsa-devdev-sa という名前の ServiceAccount を作成します。

    kubectl apply -f serviceaccount.yaml

    ServiceAccount が正常に作成されたかどうかを確認します。

    kubectl get serviceaccount -n rrsa-dev

    出力に dev-sa が含まれている場合、作成は成功です。

ステップ 4: サイドカーコンテナイメージを作成する

Alibaba Cloud の ACK コンテナサービスで、アプリケーションコンテナと一緒に KMS Agent をサイドカーコンテナとしてデプロイします。

  1. config.toml で KMS Agent ランタイムパラメータを構成します。

    説明

    config.toml は Agent の構成ファイルです。このファイルは、ステップ 1 で取得した alibabacloud-kms-agent ソースコードの configs ディレクトリにあります。

    [Server]
    HttpPort = 2025
    
    [KMS]
    Region = "cn-hangzhou"
    
    [Cache]
    CacheType = "InMemory"
    CacheSize = 1000
    TtlSeconds = 300
    
    [Log]
    LogLevel = "Debug"
    LogPath = "./logs/"
    MaxSize = 100
    MaxBackups = 2
  2. Dockerfile を作成します。

    たとえば、Agent が deploy/ack/agent パスにデプロイされている場合は、そのパスに Dockerfile を作成します。ファイルの内容については、agent_Dockerfile をご参照ください。

    # centos イメージをベースとして使用する
    FROM centos:centos7
    
    # コンテナ内の作業ディレクトリを設定する
    WORKDIR /usr/local/alibabacloudkmsagent
    
    # バイナリと構成をコンテナにコピーする
    COPY alibabacloud-kms-agent .
    COPY config.toml .
    
    # エントリポイントを設定して kms agent を実行する
    ENTRYPOINT ["./alibabacloud-kms-agent", "agent", "./config.toml"]
    
    
    # 日本語訳のコメントを追加 (元の英語のコメントは残す)
    # Use the centos image as the base (centos イメージをベースとして使用する)
    # Set the working directory inside the container (コンテナ内の作業ディレクトリを設定する)
    # Copy the binary and config to the container (バイナリと構成をコンテナにコピーする)
    # Set the entry point to run the kms agent (エントリポイントを設定して kms agent を実行する)
    
  3. ステップ 1 と2 で作成したファイルを deploy/ack/agent ディレクトリにコピーします。

    deploy/ack/agent
    ├── alibabacloud-kms-agent
    ├── config.toml
    ├── Dockerfile.agent
  4. サイドカーコンテナイメージを作成し、Alibaba Cloud Container Registry にアップロードします。

    # ビルド
    docker build -t registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0 .
    # アップロード
    docker push registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0

ステップ 5: ビジネスコンテナイメージを作成する

  1. たとえば、ビジネスアプリケーションが deploy/ack/app パスにデプロイされている場合は、そのパスにアプリケーションコンテナイメージの Dockerfile を記述します。

    # centos イメージをベースとして使用する
    FROM centos:centos7
    
    # コンテナ内の作業ディレクトリを設定する
    WORKDIR /
    
    # エントリポイントを設定して kms agent を実行する
    ENTRYPOINT ["sleep", "360000"]
  2. アプリケーションコンテナイメージを作成し、Alibaba Cloud Container Registry にアップロードします。

    # ビルド
    docker build -t registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:app-v1.0 .
    # アップロード
    docker push registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:app-v1.0

ステップ 6: アプリケーションをデプロイする

方法 1: カスタムデプロイメントテンプレート

カスタムデプロイメントテンプレートを作成して、アプリケーションコンテナと同じ Pod に KMS Agent を追加コンテナとしてデプロイします。以下に示すように、app コンテナと sidecar コンテナを同じ Pod または Deployment に配置してデプロイします。コンテナアプリケーションの実行方法については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。

  • KMS_TOKEN: Agent の起動時に生成される SSRF トークンファイルの格納パスを指定します。

  • ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC ID プロバイダの ARN。この場合は ACK クラスタ ARN です。

  • ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンを含むファイルパス。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: rrsa-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      serviceAccountName: dev-sa
      containers:
      - name: kmsagent
        image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0
        env:
        - name: ALIBABA_CLOUD_ROLE_ARN
          value: acs:ram::<uid>:role/dev-role-for-rrsa
        - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
          value: acs:ram::<uid>:oidc-provider/ack-rrsa-<ackClusterId>
        - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
          value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
        - name: KMS_TOKEN
          value: file:///var/run/kmstoken/token
        volumeMounts:
          - name: shared-volume
            mountPath: /var/run/kmstoken
          - name: rrsa-oidc-token
            mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
            readOnly: true
        command: ["/bin/sh", "-c", "./alibabacloud-kms-agent token /var/run/kmstoken/token && ./alibabacloud-kms-agent agent config.toml"]
      - name: my-app
        image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns/<repo>:app-v1.0
        volumeMounts:
          - name: shared-volume
            mountPath: /var/run/kmstoken
      volumes:
        - name: shared-volume
          emptyDir: {}
        - name: rrsa-oidc-token
          projected:
            defaultMode: 420
            sources:
            - serviceAccountToken:
               audience: sts.aliyuncs.com
               expirationSeconds: 3600
               path: token

方法 2: OpenKruise をインストールして挿入ルールを構成する

OpenKruise は、Kubernetes の標準拡張機能のセットです。ネイティブ Kubernetes と組み合わせて使用することで、アプリケーション Pod、サイドカーコンテナ、およびイメージ配布を効率的に管理できます。詳細については、「OpenKruise を使用してクラウドネイティブアプリケーションをデプロイする」をご参照ください。

  1. OpenKruise をインストールします。image

    1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

    2. [クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

    3. [アドオン] ページで、[アプリケーションの管理] タブをクリックします。[ack-kruise] セクションで、[インストール] をクリックします。

      [注記] ダイアログボックスで、コンポーネント情報を確認し、[OK] をクリックします。

  2. サイドカー挿入ルールを設定します。

    サイドカーコンテナ挿入ルールを設定して、ラベル app が付いた Pod にサイドカーコンテナを挿入します。

    • 環境変数の定義:

      • KMS_TOKEN: Agent の起動時に生成される SSRF トークンファイルの格納パスを指定します。

      • ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。

      • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC ID プロバイダの ARN。この場合は ACK クラスタ ARN です。

      • ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンを含むファイルパス。

    • セレクターの定義: サイドカー挿入が必要な Pod を選択します。これは実際の要件に応じて変更できます。この例では、app ラベルが付いた Pod にサイドカーコンテナを挿入します。

    apiVersion: apps.kruise.io/v1alpha1
    kind: SidecarSet
    metadata:
      name: kms-agent-sidecarset
      namespace: rrsa-dev
    spec:
      serviceAccountName: dev-sa
      containers:
      - name: kms-agent
        image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0
        env:
        - name: ALIBABA_CLOUD_ROLE_ARN
          value: acs:ram::<uid>:role/dev-role-for-rrsa
        - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
          value: acs:ram::<uid>:oidc-provider/ack-rrsa-<ackClusterId>
        - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
          value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
        - name: KMS_TOKEN
          value: file:///var/run/kmstoken/token
        volumeMounts:
           - name: shared-volume
             mountPath: /var/run/kmstoken
           - name: rrsa-oidc-token
             mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
             readOnly: true
        command: ["/bin/sh", "-c", "./alibabacloud-kms-agent token /var/run/kmstoken/token && ./alibabacloud-kms-agent agent config.toml"]
      # サイドカー挿入が必要な Pod を選択するために使用されます。実際の要件に応じて変更できます。
      selector:
        matchLabels:
          app: app
      volumes:
         - name: shared-volume
           emptyDir: {}
         - name: rrsa-oidc-token
           projected:
             defaultMode: 420
             sources:
             - serviceAccountToken:
                 audience: sts.aliyuncs.com
                 expirationSeconds: 3600
                 path: token
  3. KMS Agent を自動的に挿入します。

    Deployment ファイルを作成し、ラベル app: app を付けて ACK にアプリケーションをデプロイして、サイドカーコンテナの挿入を有効にします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app-with-kmsagent
      namespace: rrsa-dev
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: app
      template:
        metadata:
          labels:
            app: app
        spec:
          serviceAccountName: dev-sa
          containers:
          - name: my-app
            image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:app-v1.0
            volumeMounts:
              - name: shared-volume
                mountPath: /var/run/kmstoken
          volumes:
            - name: shared-volume
              emptyDir: {}
  4. コンテナアプリケーションを実行します。詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。

    アプリケーションが起動すると、アプリケーションが配置されている Pod に KMS agent プロキシコンテナが挿入されていることがわかります。

    image.png

ステップ 7: シークレット値を作成して取得する

  1. KMS でシークレットを作成します。

    この例では、シークレットを作成するときに、タグ env:dev を追加する必要があります。アプリケーションコンテナはこのタグが付いたシークレットのみを取得でき、他のシークレットを取得する権限はありません。

    1. KMS コンソール にログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、リソース > 資格情報管理 を選択します。

    2. Generic Secrets タブをクリックし、インスタンス管理 を選択して、資格情報の作成 をクリックします。パラメータを構成し、[OK] をクリックします。

      パラメータ

      説明

      資格情報名

      シークレットの名前。シークレット名は現在のリージョン内で一意です。

      Secret Value

      管理する機密データのタイプ。有効な値: [シークレットキー/値] および [プレーンテキスト]

      値の長さは 30,720 バイト (30 KB) を超えることはできません。

      Initial Version

      シークレットの初期バージョン。デフォルト値: [v1]。カスタムバージョン番号を指定することもできます。

      CMK

      シークレットの現在の値の暗号化に使用するキー。

      重要
      • キーとシークレットは同じ KMS インスタンスに属している必要があります。キーは対称キーである必要があります。KMS でサポートされている対称キーの詳細については、「対称暗号化と非対称暗号化のキースペック」をご参照ください。

      • RAM ユーザーまたは RAM ロールの場合は、キーを使用して GenerateDataKey 操作を呼び出す権限が必要です。

      タグ

      シークレットに追加するタグ。タグを使用してシークレットを分類および管理できます。タグはキーと値のペアで構成されます。

      説明
      • タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。

      • タグキーは aliyun または acs: で始めることはできません。

      • シークレットごとに最大 20 個のキーと値のペアを構成できます。

      説明

      シークレットの説明。

      ポリシー設定

      シークレットのポリシー設定。詳細については、「概要」をご参照ください。

      デフォルトのポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。

  2. シークレット値を取得します。

    • curl コマンドを使用する。

      curl -v -H "X-Vault-Token:$(</var/run/kmstoken/token)" 'http://localhost:2025/secretsmanager/get?secretId=app/dev/secret-1'
    • ビジネスコードで HTTP GET リクエストを使用してシークレットを取得する。

      package main
      
      import (
      	"fmt"
      	"io/ioutil"
      	"net/http"
      )
      
      func main() {
      	url := fmt.Sprintf("http://localhost:2025/secretsmanager/get?secretId=%s", "app/dev/secret-1")
      
      	token, err := ioutil.ReadFile("/var/run/kmstoken/token")
      	if err != nil {
      		fmt.Printf("error reading token file: %v\n", err) // トークンファイルの読み取りエラー: %v
      	}
      
      	req, err := http.NewRequest("GET", url, nil)
      	if err != nil {
      		fmt.Printf("error creating request: %v\n", err) // リクエストの作成エラー: %v
      	}
      
      	req.Header.Add("X-KMS-Token", string(token))
      
      	client := &http.Client{}
      	resp, err := client.Do(req)
      	if err != nil {
      		fmt.Printf("error sending request: %v \n", err) // リクエストの送信エラー: %v
      	}
      	defer resp.Body.Close()
      
      	body, _ := ioutil.ReadAll(resp.Body)
      	fmt.Printf("status code %d - %s \n", resp.StatusCode, string(body)) // 状態コード %d - %s
      }