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

Container Service for Kubernetes:ack-secret-manager を使用して OOS 暗号化パラメータをインポートする

最終更新日:Jun 12, 2025

ack-secret-manager を使用すると、CloudOps Orchestration Service (OOS) から Container Service for Kubernetes (ACK) クラスターに暗号化パラメータを Kubernetes Secrets としてインポートまたは同期できます。Kubernetes Secrets は、クラスター内の機密情報を保存するために使用されます。このコンポーネントを使用すると、OOS から ACK クラスターへの暗号化パラメータの同期を自動化できます。このようにして、クラスター内のアプリケーションは、ファイルシステムを使用して指定された Secrets をマウントし、最新の OOS 暗号化パラメータを使用できます。これは、アプリケーションと OOS 暗号化パラメータ間の互換性の向上に役立ちます。

セキュリティに関する注意事項

ほとんどの場合、アプリケーションはファイルシステムから直接シークレットを読み取ります。アプリケーションと OOS 暗号化パラメータの間には互換性の問題が存在する可能性があります。ack-secret-manager コンポーネントは、互換性の問題を解決できます。また、このコンポーネントを使用して、OOS から ACK クラスターの Kubernetes Secrets に暗号化パラメータを同期することもできます。その後、Kubernetes Secrets を環境変数としてマウントして使用できます。このコンポーネントを使用する前に、以下のセキュリティリスクを評価してください。

  • クラスター内のシークレットがファイルシステムを介してアクセス可能な場合、攻撃者はアプリケーションの Common Vulnerabilities and Exposures (CVE) 脆弱性を悪用して、クラスター内のディレクトリを走査する可能性があります。その結果、シークレットが漏洩する可能性があります。

  • デバッグのブレークポイントまたはログ権限の誤設定により、認証情報の漏洩につながる可能性があるため、環境変数を参照してシークレットを使用することは安全ではなく、推奨されません。

  • シークレットの同期を有効にする場合は、最小権限の原則に厳密に従ってアクセス権限を制限してください。

アプリケーションでシークレットを永続化する必要がない場合は、RRSA を使用して異なるポッドに異なるクラウドサービスへのアクセスを承認するを参照して、ポッドに最小限のアクセス権限を付与することをお勧めします。次に、GetSecretParameter を参照して、アプリケーションが API 操作を呼び出して暗号化パラメータを直接取得するように構成します。これにより、ポッドファイルシステムまたは Kubernetes Secrets で暗号化パラメータが公開される可能性が低くなります。

前提条件

ステップ 1: ack-secret-manager をインストールする

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

  2. [クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。クラスター詳細ページの左側のペインで、[アプリケーション] > [Helm] を選択します。

  3. [Helm] ページで、[デプロイ] をクリックします。[デプロイ] パネルの [Chart] セクションで、[ack-secret-manager] を見つけて選択し、その他のパラメーターにはデフォルト値を使用し、[次へ] をクリックします。

    確認メッセージに表示される情報は、コンポーネントがデフォルトで kube-system 名前空間にインストールされ、デフォルトのアプリケーション名がコンポーネント名として使用されることを示しています。 [はい] をクリックします。カスタムアプリケーションとカスタム名前空間を使用する場合は、[基本情報] ステップで [アプリケーション名] パラメーターと [名前空間] パラメーターを設定します。

  4. [パラメーター] ステップで、最新のチャートバージョンを選択し、その他のパラメーターを設定して、[OK] をクリックします。

    • サービスアカウントの RAM ロール (RRSA) を認証に使用する場合、[true] に rrsa.enable パラメーターを設定します。image

    • 暗号化パラメーターのスケジュールされた同期を有効にする場合は、次の図に示すパラメーターを構成します。image

      • command.disablePolling: 暗号化パラメーターの自動回転機能を有効にするかどうかを指定します。暗号化パラメーターの自動回転機能を有効にするには、値を [false] に設定します。

      • command.pollingInterval: 暗号化パラメーターを同期する頻度を指定します。この例では、このパラメーターは [120] 秒に設定されており、暗号化パラメーターが 2 分ごとに同期されることを指定しています。必要に応じて値を調整できます。

    • 調整パラメーターの構成: クラスタに多数の ExternalSecrets (同期される OOS 暗号化パラメーター) がある場合、不適切な構成によって OOS または RAM で調整が発生する可能性があります。そのため、調整を回避するには、次の調整パラメーターを構成する必要があります。image command.maxConcurrentOosSecretPulls: 1 秒あたりに同期できる OOS 暗号化パラメーターの最大数を指定します。デフォルト値: 10。

    コンポーネントをインストールすると、[ack-secret-manager] ページにリダイレクトされます。コンポーネントがインストールされているかどうかを確認できます。次の図に示すリソースが作成されている場合、コンポーネントはインストールされています。image.png

ステップ 2: ack-secret-manager に OOS 暗号化パラメータへのアクセスを承認する

ack-secret-manager が OOS 暗号化パラメータにアクセスできるようにするには、SecretStore を作成する必要があります。そうしないと、ack-secret-manager は OOS から ACK クラスターに暗号化パラメータをインポートまたは同期できません。次の方法を使用して、ack-secret-manager に OOS 暗号化パラメータへのアクセスを承認できます。

  • RRSA を使用して権限を付与する: この方法は、Kubernetes 1.22 以降を実行する ACK マネージドクラスター および ACK Serverless クラスター に適用されます。

  • クラスターのワーカー RAM ロールに権限を付与する: この方法は、ACK マネージドクラスターACK 専用クラスター、および 登録済みクラスター に適用されます。

  • RAM ロールを偽装するために使用する AccessKey ペアを指定する: この方法は、すべてのタイプの ACK クラスターに適用されます。

RRSA を使用して権限を付与する

この方法は、Kubernetes 1.22 以降を実行する ACK マネージドクラスター および ACK Serverless クラスター に適用されます。他の承認方法と比較して、RRSA はポッドの権限を分離し、AccessKey ID と AccessKey シークレットの使用によって引き起こされるシークレット漏洩のリスクを回避できます。

  1. ACK コンソール で ACK クラスターの RRSA 機能を有効にします。詳細については、RRSA を有効にする を参照してください。

    説明

    ack-secret-manager をインストールするときに、rrsa.enable パラメータを [true] に設定して RRSA を有効にします。

  2. 信頼できるエンティティが ack-secret-manager の ID プロバイダー (IdP) である RAM ロールを作成します。次の表に主要なパラメータを示します。詳細については、OIDC IdP の RAM ロールを作成する を参照してください。

    パラメータ

    説明

    ID プロバイダータイプ

    [OIDC] を選択します。

    ID プロバイダー

    ack-rrsa-<cluster_id> 形式で名前が付けられた ID プロバイダーを選択します。<cluster_id> はクラスターの ID を示します。

    条件

    • oidc:iss: デフォルト値を使用します。

    • oidc:aud: デフォルト値を使用します。

    • oidc:sub: 1 つ以上の条件を手動で追加します。

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

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

      • : system:serviceaccount:<namespace>:<serviceAccountName> と入力します。

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

          説明

          ack-secret-manager を別の名前空間にインストールした場合は、kube-system を実際の名前空間に置き換えます。

        • <serviceAccountName>: サービスアカウントの名前を指定します。この例では、system:serviceaccount:rrsa-demo:demo-sa と入力します。

  3. カスタム RAM ポリシーを作成し、RAM ロールにポリシーをアタッチします。

    1. ack-secret-manager を使用して OOS 暗号化パラメーターをインポートする際に必要なポリシーを作成します。

    2. 次のコードブロックは、ポリシーの内容を示しています。詳細については、「カスタムポリシーを作成する」をご参照ください。

      {
          "Action": [
             "oos:GetSecretParameter",
             "kms:GetSecretValue"
          ],
          "Resource": [
              "*"
          ],
          "Effect": "Allow"
      }
    3. RAM ロールにポリシーをアタッチします。 詳細については、「RAM ロールに権限を付与する」をご参照ください。

  4. SecretStore を作成して、認証方式を指定します。

    1. 以下の説明に基づいて、次のコードブロックを修正します。次に、修正したコードブロックに基づいて、secretstore-rrsa.yaml という名前のファイルを作成します。

      • {accountID}: この値を、OOS 暗号化パラメータの同期に使用する Alibaba Cloud アカウントの ID に置き換えます。

      • {clusterID}: この値をクラスターの ID に置き換えます。

      • {roleName}: この値を手順 2で作成した RAM ロールの名前に置き換えます。

    2. apiVersion: 'alibabacloud.com/v1alpha1'
      kind: SecretStore
      metadata:
        name: scdemo-rrsa
      spec:
        OOS:
          OOSAuth:
            oidcProviderARN: "acs:ram::{accountID}:oidc-provider/ack-rrsa-{clusterID}"
            ramRoleARN: "acs:ram::{accountID}:role/{roleName}"	                     
    3. 次のコマンドを実行して、SecretStore を作成します。

    4. kubectl apply -f secretstore-rrsa.yaml

クラスターのワーカー RAM ロールに権限を付与する

この方法は、ACK マネージドクラスターACK 専用クラスター、および 登録済みクラスター に適用されます。ACK Serverless クラスターにはワーカー RAM ロールが割り当てられていないため、この方法は ACK Serverless クラスター には適用されません。

  1. 次のコードブロックに基づいてカスタム RAM ポリシーを作成します。詳細については、カスタムポリシーを作成する を参照してください。

  2. {
      "Action": [
        "oos:GetSecretParameter", // OOS からシークレットパラメータを取得するアクション
        "kms:GetSecretValue" // KMS からシークレット値を取得するアクション
      ],
      "Resource": [
        "*" // すべてのリソース
      ],
      "Effect": "Allow" // 許可
    }
    
  3. カスタムポリシーをクラスターのワーカー RAM ロールにアタッチします。詳細については、「[製品の変更] ACK マネージドクラスターのワーカー RAM ロールの権限が取り消されました」トピックの ステップ 2: カスタムポリシーをワーカー RAM ロールにアタッチする セクションを参照してください。

RAM ロールを偽装するために使用する AccessKey ペアを指定する

この方法は、すべてのタイプの ACK クラスターに適用されます。

  1. 信頼できるエンティティが ack-secret-manager の Alibaba Cloud アカウントである RAM ロールを作成します。RAM ロールの作成方法については、信頼できる Alibaba Cloud アカウントの RAM ロールを作成する を参照してください。

  2. カスタム RAM ポリシーを作成し、前のステップで作成した RAM ロールにポリシーをアタッチします。

    1. OOS 暗号化パラメーターにアクセスするために必要なポリシーを作成します。

    2. 次のコードブロックは、ポリシーの内容を示しています。 詳細については、「カスタムポリシーを作成する」をご参照ください。

    3. {
        "Action": [
          "oos:GetSecretParameter",
          "kms:GetSecretValue"
        ],
        "Resource": [
          "*"
        ],
        "Effect": "Allow"
      }
      
    4. 前のステップで作成した RAM ロールにポリシーをアタッチします。 詳細については、「RAM ロールに権限を付与する」をご参照ください。

  3. 作成した RAM ロールを偽装する権限を提供するカスタム RAM ポリシーを作成し、使用する RAM ユーザーにポリシーをアタッチします。

    1. 作成した RAM ロールの偽装に必要な権限を含むカスタム RAM ポリシーを作成します。

    2. 次のコードブロックは、ポリシーの内容を示しています。 詳細については、「カスタムポリシーを作成する」をご参照ください。

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Resource": "acs:ram::***:role/****"  // このセクションの手順 1 で作成した RAM ロールの Amazon リソースネーム (ARN)。
              }
          ],
          "Version": "1"
      }
    3. 使用する RAM ユーザーにポリシーをアタッチします。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

  4. 使用する RAM ユーザーの AccessKey ペアを保存する Secret を作成します。

    1. 次のコードブロックの AccessKey ペアを、Base64 でエンコードされた実際の AccessKey ペアに置き換えます。 その後、変更したコードブロックに基づいて ramuser.yaml という名前のファイルを作成します。

      apiVersion: v1
      data:
        accessKey: {AccessKey ID encoded in Base64}  # Base64 でエンコードされた AccessKey ID
        accessKeySecret: {AccessKey secret encoded in Base64} # Base64 でエンコードされた AccessKey シークレット
      kind: Secret
      metadata:
        name: ramuser
        namespace: kube-system
      type: Opaque
    2. 次のコマンドを実行して、ramuser シークレットを作成します。

      kubectl apply -f ramuser.yaml
  5. SecretStore を作成して認証方式を指定します。

    1. 次の説明に基づいて、次のコードブロックを変更します。次に、変更したコードブロックに基づいて、secretstore-ramrole.yaml という名前のファイルを作成します。

      • {accountID}: 値を、OOS 暗号化パラメータの同期に使用する Alibaba Cloud アカウントの ID に置き換えます。

      • {roleName}: 値を、手順 1 で作成した RAM ロールの名前に置き換えます。

      • {secretName}: 値を、AccessKey ペアを格納するシークレットの名前に置き換えます。

      • {secretNamespace}: 値を、AccessKey ペアを格納するシークレットの名前空間に置き換えます。

      • {secretKey}: 値を、AccessKey ペアを格納するシークレットのキーに置き換えます。

      • {roleSessionName}: 値をロールセッションの名前に置き換えます。カスタム文字列を指定できます。

    2. apiVersion: 'alibabacloud.com/v1alpha1'
      kind: SecretStore
      metadata:
        name: scdemo-ramrole
      spec:
        OOS:
          OOSAuth:
            accessKey:
              name: {secretName}
              namespace: {secretNamespace}
              key: {secretKey}
            accessKeySecret:
              name: {secretName}
              namespace: {secretNamespace}
              key: {secretKey}
            ramRoleARN: "acs:ram::{accountID}:role/{roleName}"  
            ramRoleSessionName: {roleSessionName}
    3. 次のコマンドを実行して、SecretStore を作成します。

    4. kubectl apply -f secretstore-ramrole.yaml

ステップ 3: 同期詳細を指定する

認証情報が構成された後、ExternalSecret を使用してアクセスされる OOS 暗号化パラメーターを構成する必要があります。 これにより、OOS 暗号化パラメーターを Kubernetes Secret にインポートできます。

説明

OOS 暗号化パラメーターによってインポートされた Kubernetes Secret の名前空間と名前は、ExternalSecret の名前空間と名前と同じである必要があります。

  1. ExternalSecret を作成します。

    1. 次の説明に基づいて、次のコードブロックを変更します。 次に、変更したコードブロックに基づいて external.yaml という名前のファイルを作成します。

      パラメーター

      説明

      {OOS パラメーター名}

      必須。 値を目的の OOS 暗号化パラメーターの名前に置き換えます。

      {Kubernetes シークレットキー}

      必須。 キーと値のペアのコレクション。 単一の OOS 暗号化パラメーターは、Kubernetes Secret 内の特定のキーと値のペアに格納されます。 {Kubernetes シークレットキー} を目的のキーと値のペアのキーに置き換える必要があります。

      {シークレットストア名}

      オプション。 作成した SecretStore の名前に値を置き換えます。 SecretStore は、ack-secret-manager が OOS 暗号化パラメーターにアクセスすることを承認するために使用されます。

      説明

      コンポーネントがワーカー RAM ロールによって承認されている場合は、このパラメーターを空のままにすることができます。

      {シークレットストアの名前空間}

      オプション。 作成した SecretStore の名前空間に値を置き換えます。

      説明

      コンポーネントがワーカー RAM ロールによって承認されている場合は、このパラメーターを空のままにすることができます。

      apiVersion: 'alibabacloud.com/v1alpha1'
      kind: ExternalSecret
      metadata:
        name: esdemo
      spec:
        provider: oos # 同期する Alibaba Cloud サービスの種類。 デフォルト値は kms です。 OOS 暗号化パラメーターを同期する場合は、値を oos に設定する必要があります。
        data: # データソースに追加の構成は必要ありません。
          - key: {OOS パラメーター名}
            name: {Kubernetes シークレットキー}
            secretStoreRef:   # コンポーネントがワーカー RAM ロールによって承認されている場合は、このパラメーターを空のままにすることができます。
              name: {シークレットストア名}
              namespace: {シークレットストアの名前空間}
    2. 次のコマンドを実行して、ExternalSecret を作成します。

      kubectl apply -f external.yaml
  2. 次のコマンドを実行して、Kubernetes Secret が作成されたかどうかを確認します。

    kubectl get secret esdemo

    Kubernetes Secret が作成されると、暗号化パラメーターは OOS からクラスターに同期されます。

高度な ack-secret-manager 構成

クロスアカウント暗号化パラメーター同期

OOS インスタンスとクラスターが同じ Alibaba Cloud アカウントに属していない場合は、アカウント間で OOS 暗号化パラメーターをクラスターに同期する必要があります。ack-secret-manager はクロスアカウント暗号化パラメーター同期をサポートしています。次の例は、RRSA 機能を使用して、Alibaba Cloud アカウント A から Alibaba Cloud アカウント B に属する ACK クラスターに OOS 暗号化パラメーターをインポートする方法を示しています。

Alibaba Cloud アカウント A の構成

  1. Alibaba Cloud アカウント A を使用して、信頼できるエンティティが Alibaba Cloud アカウント B である RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。

    重要

    信頼できる Alibaba Cloud アカウントを選択するときは、[その他の Alibaba Cloud アカウント] を選択し、Alibaba Cloud アカウント B の ID を入力します。

  2. OOS 暗号化パラメーターにアクセスするために必要なポリシーを作成します。

    次のコードブロックは、ポリシーの内容を示しています。詳細については、「カスタムポリシーを作成する」をご参照ください。

    {
        "Action": [
           "oos:GetSecretParameter",
           "kms:GetSecretValue"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
  3. ポリシーを RAM ロールにアタッチします。詳細については、「RAM ロールに権限を付与する」をご参照ください。

Alibaba Cloud アカウント B の構成

  1. ACK コンソール で ACK クラスターの RRSA 機能を有効にします。詳細については、「RRSA を有効にする」をご参照ください。

    説明

    ack-secret-manager をインストールするときは、rrsa.enable パラメーターを [true] に設定して RRSA を有効にします。

  2. ack-secret-manager の ID プロバイダー (IdP) を信頼できるエンティティとする RAM ロールを作成します。次の表は、主要なパラメーターについて説明しています。詳細については、「OIDC IdP の RAM ロールを作成する」をご参照ください。

    パラメーター

    説明

    ID プロバイダータイプ

    [OIDC] を選択します。

    ID プロバイダー

    ack-rrsa-<cluster_id> 形式の名前の ID プロバイダーを選択します。<cluster_id> はクラスターの ID を示します。

    条件

    • oidc:iss: デフォルト値を使用します。

    • oidc:aud: デフォルト値を使用します。

    • oidc:sub: 1 つ以上の条件を手動で追加します。

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

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

      • [値]: system:serviceaccount:<namespace>:<serviceAccountName> と入力します。

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

          説明

          ack-secret-manager を別の名前空間にインストールした場合は、kube-system を実際の名前空間に置き換えます。

        • <serviceAccountName>: サービスアカウントの名前を指定します。この例では、system:serviceaccount:rrsa-demo:demo-sa と入力します。

  3. カスタム RAM ポリシーを作成し、前の手順で Alibaba Cloud アカウント B を使用して作成した RAM ロールにアタッチします。

    1. ack-secret-manager を使用して OOS 暗号化パラメーターをインポートするときに必要なポリシーを作成します。

      次のコードブロックは、ポリシーの内容を示しています。Resource を、Alibaba Cloud アカウント A を使用して作成した RAM ロールの ARN に設定します。詳細については、「カスタムポリシーを作成する」をご参照ください。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "acs:ram:*:<account-id>:role/<role-name>" // Alibaba Cloud アカウント A を使用して作成した RAM ロールの ARN。
          }
        ],
        "Version": "1"
      }

      上記のカスタムポリシーでは、次のとおりです。

      • Resource: RAM ロールの ARN。

      • <account-id>: Key Management Service (KMS) インスタンスが配置されているアカウント A の ID。

      • <role-name>: アカウント A で作成された RAM ロールの名前。

      RAM ロールの ARN を表示するには、「RAM ロールの ARN を表示する方法」をご参照ください。

    2. 前のステップでAlibaba Cloudアカウント Bを使用して作成したRAM ロールにポリシーをアタッチします。 詳細については、「RAM ロールに権限を付与する」をご参照ください。

  4. SecretStore を作成します。

    次の説明に基づいて、次のコードブロックを変更します。次に、変更したコードブロックに基づいて secretstore-ramrole.yaml という名前のファイルを作成します。

    • {ACK-accountID}: 値を Alibaba Cloud アカウント B の ID に置き換えます。

    • {clusterID}: 値をクラスターの ID に置き換えます。

    • {ACK-roleName}: 値を Alibaba Cloud アカウント B を使用して作成した RAM ロールの名前に置き換えます。

    • {OOS-accountID}: 値を Alibaba Cloud アカウント A の ID に置き換えます。

    • {OOS-roleName}: 値を Alibaba Cloud アカウント A を使用して作成した RAM ロールの名前に置き換えます。

    • {roleSessionName}: 値をロールセッションの名前に置き換えます。カスタム文字列を指定できます。

    apiVersion: 'alibabacloud.com/v1alpha1'
    kind: SecretStore
    metadata:
      name: scdemo-cross-account
    spec:
      OOS:
        OOSAuth:
          oidcProviderARN: "acs:ram::{ACK-accountID}:oidc-provider/ack-rrsa-{clusterID}"
          ramRoleARN: "acs:ram::{ACK-accountID}:role/{ACK-roleName}"
          remoteRamRoleARN: "acs:ram::{OOS-accountID}:role/{OOS-roleName}"
          remoteRamRoleSessionName: {roleSessionName}
  5. 同期の詳細を指定します。詳細については、「手順 3: 同期の詳細を指定する」をご参照ください。

暗号化パラメーターの解析とキーの置き換え

次のセクションでは、JSON/YAML シークレットで指定されたキーを解析する方法について説明します。

JSON 形式の暗号化パラメーターを解析する

JSON シークレットで指定されたキーを解析する

JSON 形式の OOS シークレットを解析し、OOS シークレットから Kubernetes シークレットに指定されたキーと値のペアを同期するには、jmesPath パラメーターを構成します。たとえば、次の JSON シークレットが OOS 暗号化パラメーターに保存されているとします。

{"name":"tom","friends":[{"name":"lily"},{"name":"mark"}]}

次のサンプルコードに基づいて ExternalSecret を作成します。jmesPath パラメーターで次のフィールドを指定する必要があります。

  • path: JMESPath 仕様に基づいて、指定された JSON フィールドを解析します。このパラメーターは必須です。

  • objectAlias: 解析されたフィールドに基づいて同期される Kubernetes シークレットのキーと値のペアのキーを指定します。

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: es-json-demo
spec:
  provider: oos
  data: 
    - key: {OOS パラメーター名}
      secretStoreRef:
        name: {シークレットストア名}
        namespace: {シークレットストアの名前空間}
      jmesPath: # json 文字列の一部のフィールドを解析する
        - path: "name"
          objectAlias: "myname"
        - path: "friends[0].name"
          objectAlias: "friendname"
JSON シークレットの自動解析

JSON 暗号化パラメーターのデータ構造が不明な場合でも、暗号化パラメーターを解析して解析済みデータを Kubernetes シークレットに保存する必要がある場合は、dataProcess.extract パラメーターを構成して JSON の自動解析を有効にできます。さらに、dataProcess.replaceRule パラメーターを構成して、解析済みデータのキーを置き換えるルールを指定できます。これにより、不規則なシークレットデータキーによって Kubernetes シークレットの作成が失敗することを防ぎます。

たとえば、次の JSON シークレットが OOS 暗号化パラメーターに保存されているとします。

{"/name-invalid":"lily","name-invalid/":[{"name":"mark"}]}

次のサンプルコードに基づいて ExternalSecret を作成します。

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: extract-secret
spec:
  provider: oos
  dataProcess:
    - extract:
        key: {OOS パラメーター名}
        secretStoreRef:
          name: {シークレットストア名}
          namespace: {シークレットストアの名前空間}
      replaceRule: # キーを置き換えるルール。
        - source: "^/.*d$" # スラッシュ (/) で始まり小文字の d で終わるキーを tom に置き換えます。
          target: "tom"
        - source: "^n.*/$" # 小文字の n で始まりスラッシュ (/) で終わるキーを mark に置き換えます。
          target: "mark"

YAML 形式の暗号化パラメーターを解析する

YAML シークレットで指定されたキーを解析する

YAML 形式の OOS シークレットを解析し、OOS シークレットから Kubernetes シークレットに指定されたキーと値のペアを同期するには、jmesPath パラメーターを構成します。たとえば、次の YAML シークレットが OOS 暗号化パラメーターに保存されているとします。

name: tom
friends:
  - name: lily
  - name: mark

次のサンプルコードに基づいて ExternalSecret を作成します。jmesPath パラメーターで次のフィールドを指定する必要があります。

  • path: JMESPath 仕様に基づいて、指定された YAML フィールドを解析します。このパラメーターは必須です。

  • objectAlias: 解析されたフィールドに基づいて同期される Kubernetes シークレットのキーと値のペアのキーを指定します。

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: es-json-demo
spec:
  provider: oos
  data: 
    - key: {OOS パラメーター名}
      secretStoreRef:
        name: {シークレットストア名}
        namespace: {シークレットストアの名前空間}
      jmesPath: # yaml 文字列の一部のフィールドを解析する
        - path: "name"
          objectAlias: "myname"
        - path: "friends[0].name"
          objectAlias: "friendname"
YAML シークレットの自動解析

YAML 暗号化パラメーターのデータ構造が不明な場合でも、暗号化パラメーターを解析して解析済みデータを Kubernetes シークレットに保存する必要がある場合は、dataProcess.extract パラメーターを構成して YAML の自動解析を有効にできます。さらに、dataProcess.replaceRule パラメーターを構成して、解析済みデータのキーを置き換えるルールを指定できます。これにより、不規則なシークレットデータキーによって Kubernetes シークレットの作成が失敗することを防ぎます。

たとえば、次の YAML シークレットが OOS 暗号化パラメーターに保存されているとします。

/name-invalid: lily
name-invalid/:
  - name: mark

次のサンプルコードに基づいて ExternalSecret を作成します。

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: extract-secret
spec:
  provider: oos
  dataProcess:
    - extract:
        key: {OOS パラメーター名}
        secretStoreRef:
          name: {シークレットストア名}
          namespace: {シークレットストアの名前空間}
      replaceRule: # キーを置き換えるルール。
        - source: "^/.*d$" # スラッシュ (/) で始まり小文字の d で終わるキーを tom に置き換えます。
          target: "tom"
        - source: "^n.*/$" # 小文字の n で始まりスラッシュ (/) で終わるキーを mark に置き換えます。
          target: "mark"

参考資料

OOS シークレットから同期され、ACK クラスタにキャッシュされている Kubernetes シークレットを保護するために、シークレット暗号化機能を有効にすることをお勧めします。詳細については、「KMS を使用して Kubernetes シークレットを暗号化する」をご参照ください。