全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan ack-secret-manager untuk mengimpor rahasia dari KMS

更新时间:Jul 23, 2025

ack-secret-manager memungkinkan Anda mengimpor atau menyinkronkan rahasia dari Key Management Service (KMS) ke Container Service for Kubernetes (ACK) sebagai Kubernetes Secrets. Komponen ini digunakan untuk menyimpan informasi sensitif di dalam kluster dan membantu meningkatkan kompatibilitas antara aplikasi Anda dan Secrets Manager.

Pertimbangan keamanan

Informasi rahasia KMS sering disimpan dalam file agar aplikasi dapat mengambilnya. Hal ini menimbulkan masalah kompatibilitas dengan pengambilan langsung rahasia dari KMS Secrets Manager. Komponen ack-secret-manager dapat menyelesaikan masalah ini. Sebelum menggunakan komponen ini, evaluasi risiko keamanan berikut:

  • Penyerang dapat mengeksploitasi kerentanan CVE pada aplikasi untuk menjelajahi direktori kluster dan mengakses rahasia melalui sistem file.

  • Konfigurasi titik henti debug yang tidak tepat atau izin log berlebihan dapat mengekspos rahasia. Hindari merujuk rahasia melalui variabel lingkungan untuk mengurangi risiko keamanan.

  • Aktifkan sinkronisasi rahasia sesuai prinsip hak istimewa minimal untuk membatasi akses.

Jika tidak perlu menyimpan rahasia untuk aplikasi, gunakan RRSA untuk memberi otorisasi pod mengakses layanan cloud. Dapatkan rahasia secara langsung melalui operasi GetSecretValue.

Prasyarat

Kluster ACK harus dibuat di wilayah yang sama dengan rahasia KMS yang ingin digunakan. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola, Buat Kluster Terdaftar ACK One, dan Buat Kluster ACK Serverless.

Langkah 1: Instal ack-secret-manager

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih Applications > Helm.

  3. Di halaman Helm, klik Deploy. Di bagian Chart dari panel Deploy, pilih ack-secret-manager. Gunakan nilai default untuk parameter lainnya, lalu klik Next.

    Di pesan konfirmasi Confirm, informasi menunjukkan bahwa chart akan diinstal di namespace kube-system secara default. Klik Yes. Untuk menggunakan aplikasi kustom dan namespace kustom, konfigurasikan parameter Application Name dan Namespace di langkah Basic Information.

  4. Di langkah Parameters, pilih versi chart terbaru, konfigurasikan parameter lainnya, lalu klik OK.

    • Untuk mengaktifkan RRSA untuk otentikasi, atur parameter rrsa.enable ke true.image

    • Untuk mengaktifkan sinkronisasi rahasia terjadwal, konfigurasikan parameter berikut:

      image

      • command.disablePolling: Menentukan apakah round-robin untuk rahasia dinonaktifkan. Nilai false mengaktifkan round-robin.

      • command.pollingInterval: Frekuensi sinkronisasi. Nilai 120s menentukan sinkronisasi setiap 2 menit.

    • Untuk membatasi rahasia di kluster dengan banyak ExternalSecrets, konfigurasikan parameter berikut:

      image

      command.maxConcurrentKmsSecretPulls: Jumlah maksimum rahasia KMS yang disinkronkan per detik. Nilai default adalah 10.

    • Untuk menentukan alamat endpoint KMS, konfigurasikan parameter kmsEndpoint.

      image

      command.kmsEndpoint: Gateway bersama atau khusus untuk KMS.

    Setelah instalasi, Anda akan dialihkan ke halaman ack-secret-manager. Periksa sumber daya yang dibuat untuk memastikan instalasi berhasil.image.png

Langkah 2: Otorisasi ack-secret-manager untuk mengakses rahasia KMS

Anda perlu membuat SecretStore untuk memberi otorisasi ack-secret-manager mengakses rahasia KMS. Tanpa otorisasi ini, ack-secret-manager tidak dapat mengimpor atau menyinkronkan rahasia dari KMS ke kluster ACK Anda. Gunakan metode berikut untuk memberikan otorisasi kepada ack-secret-manager dalam mengakses rahasia KMS:

Gunakan RRSA untuk memberikan izin

Metode ini berlaku untuk kluster ACK managed clusters dan kluster ACK Serverless yang menjalankan Kubernetes 1.22 atau lebih baru. Fitur RRSA mencegah kebocoran rahasia karena tidak memerlukan pasangan AccessKey.

  1. Aktifkan fitur RRSA untuk kluster ACK di Konsol ACK. Ini memungkinkan pembuatan penyedia identitas (IdP). Lihat Aktifkan RRSA.

  2. Buat peran RAM dengan entitas tepercaya sebagai penyedia identitas untuk ack-secret-manager.

    Atur Principal Type ke Identity Provider. Lihat Buat Peran RAM untuk Penyedia Identitas OIDC.

    Parameter

    Deskripsi

    Identity Provider Type

    Pilih OIDC.

    Identity Provider

    Pilih ack-rrsa-<cluster_id>. <cluster_id> adalah ID kluster Anda.

    Condition

    • oidc:iss: Pertahankan pengaturan default.

    • oidc:aud: Pertahankan pengaturan default.

    • oidc:sub: Anda harus menambahkan kondisi ini secara manual.

      • Kunci: Pilih oidc:sub.

      • Operator: Pilih StringEquals.

      • Nilai: Masukkan system:serviceaccount:<namespace>:<serviceAccountName>. Ganti <namespace> dengan namespace aplikasi Anda. Ganti <serviceAccountName> dengan nama akun layanan. Dalam contoh ini, system:serviceaccount:kube-system:ack-secret-manager ditentukan.

        Catatan

        Jika Anda menginstal ack-secret-manager di namespace selain kube-system, tentukan namespace aktual.

  3. Buat kebijakan RAM kustom dan lampirkan ke peran RAM.

    1. Buat kebijakan RAM kustom yang memberi otorisasi ack-secret-manager untuk mengimpor rahasia KMS. Lihat Buat Kebijakan Kustom.

      {
          "Action": [
             "kms:GetSecretValue",
             "kms:Decrypt"
          ],
          "Resource": [
              "*"
          ],
          "Effect": "Allow"
      }
    2. Lampirkan kebijakan ke peran RAM. Lihat Berikan Izin ke Peran RAM.

  4. Buat SecretStore untuk menentukan metode autentikasi.

    1. Ubah blok kode berikut sesuai deskripsi. Buat file bernama secretstore-rrsa.yaml berdasarkan blok kode yang dimodifikasi.

      • {accountID}: Ganti dengan ID Akun Alibaba Cloud.

      • {clusterID}: Ganti dengan ID kluster Anda.

      • {roleName}: Ganti dengan nama peran RAM yang Anda buat di Langkah 2.

        apiVersion: 'alibabacloud.com/v1alpha1'
        kind: SecretStore
        metadata:
          name: scdemo-rrsa
        spec:
          KMS:
            KMSAuth:
              oidcProviderARN: "acs:ram::{accountID}:oidc-provider/ack-rrsa-{clusterID}"
              ramRoleARN: "acs:ram::{accountID}:role/{roleName}"	                     
    2. Jalankan perintah berikut untuk membuat SecretStore:

      kubectl apply -f secretstore-rrsa.yaml

Berikan izin ke peran RAM pekerja kluster

Metode ini berlaku untuk kluster ACK managed cluster, kluster ACK dedicated cluster, dan kluster terdaftar. Tidak berlaku untuk kluster ACK Serverless.

  1. Buat kebijakan RAM kustom. Lihat Buat Kebijakan Kustom.

    {
      "Action": [
        "kms:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    }
    
  2. Lampirkan kebijakan kustom ke peran RAM pekerja kluster. Lihat Berikan Izin ke Peran RAM Pekerja.

Tentukan pasangan AccessKey yang digunakan untuk mengasumsikan peran RAM

Metode ini berlaku untuk semua jenis kluster ACK.

  1. Buat peran RAM dengan entitas tepercaya sebagai akun Alibaba Cloud untuk ack-secret-manager. Lihat Buat Peran RAM untuk Akun Alibaba Cloud Tepercaya.

    Catatan

    Saat menentukan akun tepercaya, pilih Current Account.

  2. Buat kebijakan RAM kustom dan lampirkan ke peran RAM yang dibuat sebelumnya.

    1. Buat kebijakan RAM kustom yang memberikan izin untuk mengakses rahasia KMS. Lihat Buat Kebijakan Kustom.

      {
        "Action": [
          "kms:GetSecretValue",
          "kms:Decrypt"
        ],
        "Resource": [
          "*"
        ],
        "Effect": "Allow"
      }
      
    2. Lampirkan kebijakan ke peran RAM. Lihat Berikan Izin ke Peran RAM.

  3. Buat kebijakan RAM kustom untuk mengasumsikan peran RAM dan lampirkan ke pengguna RAM.

    1. Buat kebijakan RAM kustom yang berisi izin untuk mengasumsikan peran RAM. Lihat Buat Kebijakan Kustom.

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Resource": "acs:ram:*:<account-id>:role/<role-name>"  
              }
          ],
          "Version": "1"
      }

      Bidang Resource menentukan ARN dari peran RAM. Ganti <account-id> dengan ID akun Alibaba Cloud dan <role-name> dengan nama peran RAM. Lihat Bagaimana Cara Melihat ARN dari Peran RAM?

    2. Lampirkan kebijakan ke pengguna RAM. Lihat Berikan Izin ke Pengguna RAM.

  4. Buat Secret untuk menyimpan pasangan AccessKey dari pengguna RAM.

    1. Ganti pasanganAccessKey dalam blok kode berikut dengan pasangan AccessKey sebenarnya yang dikodekan dalam Base64. Buat file bernama ramuser.yaml berdasarkan blok kode yang dimodifikasi.

      apiVersion: v1
      data:
        accessKey: {AccessKey ID encoded in Base64}
        accessKeySecret: {AccessKey secret encoded in Base64}
      kind: Secret
      metadata:
        name: ramuser
        namespace: kube-system
      type: Opaque
    2. Jalankan perintah berikut untuk membuat Secret ramuser:

      kubectl apply -f ramuser.yaml
  5. Buat SecretStore untuk menentukan metode autentikasi.

    1. Ubah blok kode berikut sesuai deskripsi. Buat file bernama secretstore-ramrole.yaml berdasarkan blok kode yang dimodifikasi.

      • {accountID}: Ganti dengan ID Akun Alibaba Cloud.

      • {roleName}: Ganti dengan nama peran RAM yang Anda buat di Langkah 1.

      • {secretName}: Ganti dengan nama Secret yang menyimpan pasangan AccessKey.

      • {secretNamespace}: Ganti dengan namespace dari Secret yang menyimpan pasangan AccessKey.

      • {secretKey}: Ganti dengan kunci dari Secret yang menyimpan pasangan AccessKey.

      • {roleSessionName}: Ganti dengan nama sesi peran. Anda dapat menentukan string kustom.

        apiVersion: 'alibabacloud.com/v1alpha1'
        kind: SecretStore
        metadata:
          name: scdemo-ramrole
        spec:
          KMS:
            KMSAuth:
              accessKey:
                name: {secretName}
                namespace: {secretNamespace}
                key: {secretKey}
              accessKeySecret:
                name: {secretName}
                namespace: {secretNamespace}
                key: {secretKey}
              ramRoleARN: "acs:ram::{accountID}:role/{roleName}"  
              ramRoleSessionName: {roleSessionName}
    2. Jalankan perintah berikut untuk membuat SecretStore:

      kubectl apply -f secretstore-ramrole.yaml

Langkah 3: Tentukan detail sinkronisasi

Setelah memberi otorisasi ack-secret-manager untuk mengakses rahasia KMS, buat ExternalSecret untuk menentukan detail rahasia KMS yang ingin diakses. Dengan cara ini, rahasia KMS dapat disinkronkan ke Kubernetes Secret di kluster Anda.

Catatan

Namespace dan nama Kubernetes Secret harus sama dengan namespace dan nama ExternalSecret.

  1. Buat ExternalSecret.

    1. Ubah blok kode berikut sesuai deskripsi. Buat file bernama external.yaml berdasarkan blok kode yang dimodifikasi.

      Parameter

      Deskripsi

      {Nama rahasia KMS}

      Wajib. Ganti nilainya dengan nama rahasia KMS yang ingin Anda akses.

      {Kunci rahasia Kubernetes}

      Wajib. Ini adalah kumpulan pasangan kunci-nilai. Data rahasia KMS disimpan sebagai pasangan kunci-nilai dalam Kubernetes Secret. Anda harus mengganti {Kunci rahasia Kubernetes} dengan kunci dari pasangan kunci-nilai yang sesuai.

      {Tahap versi rahasia KMS}

      • Opsional. Ganti nilainya dengan label tahap versi rahasia KMS alih-alih nomor versi rahasia KMS. Contoh: ACSCurrent.

      • Rahasia RDS, rahasia PolarDB, rahasia Redis/Tair, rahasia RAM, dan rahasia ECS hanya dapat mengambil versi rahasia yang sesuai dengan parameter ACSPrevious dan ACSCurrent.

      • Untuk menentukan nomor versi rahasia KMS untuk sinkronisasi, Anda dapat mengganti bidang versionStage dalam template berikut dengan versionId, dan isi nomor versi rahasia KMS.

      • Rahasia RDS, rahasia PolarDB, rahasia Redis/Tair, rahasia RAM, dan rahasia ECS tidak mendukung penentuan parameter VersionId. Pengaturan parameter ini diabaikan.

      Untuk informasi lebih lanjut tentang versi rahasia dan status versi, lihat versi rahasia dalam Elemen rahasia.

      {Alamat endpoint layanan KMS}

      • Opsional. Jika Anda ingin menentukan endpoint permintaan KMS, ganti parameter ini dengan alamat endpoint yang sesuai.

      • Gateway bersama dan gateway khusus untuk KMS didukung dan dapat dikonfigurasi berdasarkan kebutuhan bisnis Anda.

      • Parameter ini merupakan konfigurasi tingkat rahasia, yang memungkinkan Anda mengonfigurasi alamat endpoint secara khusus untuk rahasia KMS. Konfigurasi global juga didukung. Untuk informasi lebih lanjut tentang deskripsi konfigurasi, lihat Konfigurasikan alamat endpoint KMS.

      • Setelah parameter ini diatur, konfigurasi global dan konfigurasi default akan digantikan, dan alamat endpoint untuk permintaan rahasia adalah nilai dari parameter ini.

      {Nama SecretStore}

      Opsional. Ganti nilainya dengan nama SecretStore yang Anda buat. SecretStore digunakan untuk memberi otorisasi ack-secret-manager mengakses rahasia KMS.

      Catatan

      Anda dapat meninggalkan parameter ini kosong jika komponen diotorisasi oleh peran RAM pekerja.

      {namespace penyimpanan rahasia}

      Opsional. Ganti nilainya dengan namespace dari SecretStore yang Anda buat.

      Catatan

      Anda dapat meninggalkan parameter ini kosong jika komponen diotorisasi oleh peran RAM pekerja.

      apiVersion: 'alibabacloud.com/v1alpha1'
      kind: ExternalSecret
      metadata:
        name: esdemo
      spec:
        provider: kms # Secara default, jenis Layanan Alibaba Cloud yang akan disinkronkan adalah KMS. Saat menyinkronkan rahasia KMS, bidang ini dapat dibiarkan kosong atau diberi nilai kms.
        data: # Tidak diperlukan konfigurasi tambahan untuk sumber data.
          - key: {Nama rahasia KMS}
            name: {Kunci rahasia Kubernetes}
            versionStage: {Tahap versi rahasia KMS}
            secretStoreRef: # Parameter ini tidak diperlukan saat komponen diotorisasi melalui peran RAM pekerja.
              name: {Nama SecretStore}
              namespace: {Namespace SecretStore}
                  - key: {Nama rahasia KMS}
            name: {Kunci rahasia Kubernetes}
            versionStage: {Tahap versi rahasia KMS}
            kmsEndpoint: {Alamat endpoint layanan KMS}
    2. Jalankan perintah berikut untuk membuat ExternalSecret:

      kubectl apply -f external.yaml
  2. Jalankan perintah berikut untuk memeriksa apakah Kubernetes Secret ada:

    kubectl get secret esdemo

    Jika Kubernetes Secret ada, rahasia KMS telah disinkronkan ke kluster Anda.

Konfigurasi lanjutan ack-secret-manager

Sinkronkan rahasia KMS lintas akun Alibaba Cloud

Jika instans KMS yang ingin Anda akses berada di Akun Alibaba Cloud A, tetapi kluster ACK yang digunakan berada di Akun Alibaba Cloud B, Anda perlu menggunakan komponen ack-secret-manager untuk menyinkronkan rahasia KMS ke kluster lintas akun Alibaba Cloud. Bagian ini menjelaskan cara menggunakan fitur RRSA untuk mengaktifkan ack-secret-manager agar dapat mengakses instans KMS di Akun Alibaba Cloud A dari kluster di Akun Alibaba Cloud B. Komponen tersebut dapat menggunakan penyedia OIDC untuk mengasumsikan peran RAM yang dimiliki oleh Akun Alibaba Cloud A. Dengan cara ini, komponen tersebut dapat mengakses instans KMS di Akun Alibaba Cloud A dan mengimpor instans KMS tersebut ke kluster di Akun Alibaba Cloud B.

Konfigurasikan izin untuk Akun Alibaba Cloud A

  1. Gunakan Akun Alibaba Cloud A untuk membuat peran RAM dengan entitas tepercaya sebagai Akun Alibaba Cloud B. Lihat Buat Peran RAM untuk Akun Alibaba Cloud Tepercaya.

    Penting

    Saat memilih akun tepercaya, pilih Other Account lalu masukkan ID Akun Alibaba Cloud B.

  2. Buat kebijakan RAM kustom yang memberikan izin untuk mengakses rahasia KMS.

    Blok kode berikut menunjukkan isi dari kebijakan tersebut. Lihat Buat Kebijakan Kustom.

    {
        "Action": [
           "kms:GetSecretValue",
           "kms:Decrypt"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
  3. Lampirkan kebijakan ke peran RAM. Lihat Berikan Izin ke Peran RAM.

Konfigurasikan izin untuk Akun Alibaba Cloud B

  1. Aktifkan fitur RRSA untuk kluster ACK di Konsol ACK. Ini memungkinkan pembuatan IdP untuk kluster Anda. Lihat Aktifkan RRSA.

    Catatan

    Saat menginstal ack-secret-manager, atur parameter rrsa.enable ke true untuk mengaktifkan RRSA.

  2. Buat peran RAM dengan entitas tepercaya sebagai penyedia identitas untuk ack-secret-manager.

    Atur Principal Type ke Identity Provider. Lihat Buat Peran RAM untuk Penyedia Identitas OIDC.

    Parameter

    Deskripsi

    Identity Provider Type

    Pilih OIDC.

    Identity Provider

    Pilih ack-rrsa-<cluster_id>. <cluster_id> adalah ID kluster Anda.

    Condition

    • oidc:iss: Pertahankan pengaturan default.

    • oidc:aud: Pertahankan pengaturan default.

    • oidc:sub: Anda harus menambahkan kondisi ini secara manual.

      • Kunci: Pilih oidc:sub.

      • Operator: Pilih StringEquals.

      • Nilai: Masukkan system:serviceaccount:<namespace>:<serviceAccountName>. Ganti <namespace> dengan namespace aplikasi Anda. Ganti <serviceAccountName> dengan nama akun layanan. Dalam contoh ini, system:serviceaccount:kube-system:ack-secret-manager ditentukan.

        Catatan

        Jika Anda menginstal ack-secret-manager di namespace selain kube-system, tentukan namespace aktual.

  3. Buat kebijakan RAM kustom dan lampirkan kebijakan tersebut ke peran RAM yang dibuat menggunakan Akun Alibaba Cloud B.

    1. Buat kebijakan RAM kustom yang memberi otorisasi ack-secret-manager untuk mengimpor rahasia KMS. Lihat Buat Kebijakan Kustom.

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "acs:ram:*:<account-id>:role/<role-name>" # ARN dari peran RAM yang Anda buat menggunakan Akun Alibaba Cloud A.
          }
        ],
        "Version": "1"
      }

      Bidang Resource menentukan ARN dari peran RAM. Ganti <account-id> dengan ID Akun Alibaba Cloud A dan <role-name> dengan nama peran RAM yang dibuat menggunakan Akun Alibaba Cloud A. Lihat Bagaimana Cara Melihat ARN dari Peran RAM?

    2. Lampirkan kebijakan ke peran RAM yang dibuat menggunakan Akun Alibaba Cloud B.

  4. Buat SecretStore.

    1. Ubah blok kode berikut sesuai deskripsi. Buat file bernama secretstore-ramrole.yaml berdasarkan blok kode yang dimodifikasi.

      • {ACK-accountID}: Ganti dengan ID Akun Alibaba Cloud B.

      • {clusterID}: Ganti dengan ID kluster Anda.

      • {ACK-roleName}: Ganti dengan nama peran RAM yang dibuat menggunakan Akun Alibaba Cloud B.

      • {KMS-accountID}: Ganti dengan ID Akun Alibaba Cloud A.

      • {KMS-roleName}: Ganti dengan ID Akun Alibaba Cloud B.

      • {roleSessionName}: Ganti dengan nama sesi peran. Anda dapat menentukan string kustom.

      apiVersion: 'alibabacloud.com/v1alpha1'
      kind: SecretStore
      metadata:
        name: scdemo-cross-account
      spec:
        KMS:
          KMSAuth:
            oidcProviderARN: "acs:ram::{ACK-accountID}:oidc-provider/ack-rrsa-{clusterID}"
            ramRoleARN: "acs:ram::{ACK-accountID}:role/{ACK-roleName}"
            remoteRamRoleARN: "acs:ram::{KMS-accountID}:role/{KMS-roleName}"
            remoteRamRoleSessionName: {roleSessionName}
  5. Tentukan detail sinkronisasi. Lihat Langkah 3: Tentukan Detail Sinkronisasi.

Penguraian rahasia KMS dan penggantian kunci

Bagian berikut menjelaskan cara mengurai kunci yang ditentukan dalam rahasia JSON/YAML.

Mengurai parameter enkripsi dalam format JSON

Mengurai kunci yang ditentukan dalam JSON

Untuk mengurai rahasia KMS dalam format JSON dan menyinkronkan pasangan kunci-nilai tertentu ke Kubernetes Secret, konfigurasikan parameter jmesPath. Contoh rahasia JSON berikut disimpan di KMS Secrets Manager:

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

Buat ExternalSecret berdasarkan kode sampel berikut. Tentukan bidang berikut dalam parameter jmesPath:

  • path: Mengurai bidang JSON tertentu berdasarkan spesifikasi JMESPath. Parameter ini wajib.

  • objectAlias: Menentukan kunci dari pasangan kunci-nilai dalam Kubernetes Secret yang disinkronkan berdasarkan bidang yang diurai.

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: es-json-demo
spec:
  provider: kms
  data: 
    - key: {Nama rahasia KMS}
      versionStage: {Tahap versi rahasia KMS}
      secretStoreRef:
        name: {Nama SecretStore}
        namespace: {Namespace SecretStore}
      jmesPath: # Mengurai beberapa bidang json 
        - path: "name"
          objectAlias: "myname"
        - path: "friends[0].name"
          objectAlias: "friendname"

Penguraian otomatis rahasia JSON

Jika Anda tidak mengetahui struktur data rahasia JSON tetapi perlu mengurai rahasia dan menyimpan data yang diurai dalam Kubernetes Secret, Anda dapat mengonfigurasi parameter dataProcess.extract untuk mengaktifkan penguraian otomatis rahasia JSON. Selain itu, Anda dapat mengonfigurasi parameter dataProcess.replaceRule guna menentukan aturan penggantian kunci dalam data yang diurai. Hal ini mencegah kegagalan pembuatan Kubernetes Secret akibat kunci data Secret yang tidak teratur.

Contoh rahasia JSON berikut disimpan di KMS Secrets Manager:

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

Buat ExternalSecret berdasarkan kode sampel berikut:

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: extract-secret
spec:
  provider: kms
  dataProcess:
    - extract:
        key: {Nama rahasia KMS}
        versionStage: ACSCurrent # Versi rahasia KMS.
        secretStoreRef:
          name: {Nama SecretStore}
          namespace: {Namespace SecretStore}
      replaceRule: #Aturan untuk mengganti kunci.
        - source: "^/.*d$" # Ganti kunci yang dimulai dengan garis miring (/) dan diakhiri dengan huruf kecil d dengan tom.
          target: "tom"
        - source: "^n.*/$" # Ganti kunci yang dimulai dengan huruf kecil n dan diakhiri dengan garis miring (/) dengan mark.
          target: "mark"

Mengurai parameter enkripsi dalam format YAML

Mengurai kunci yang ditentukan dalam YAML

Untuk mengurai rahasia KMS dalam format YAML dan menyinkronkan pasangan kunci-nilai tertentu ke Kubernetes Secret, konfigurasikan parameter jmesPath. Contoh rahasia YAML berikut disimpan di KMS Secrets Manager:

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

Buat ExternalSecret berdasarkan kode sampel berikut. Tentukan bidang berikut dalam parameter jmesPath:

  • path: Mengurai bidang YAML tertentu berdasarkan spesifikasi JMESPath. Parameter ini wajib.

  • objectAlias: Menentukan kunci dari pasangan kunci-nilai dalam Kubernetes Secret yang disinkronkan berdasarkan bidang yang diurai.

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: es-json-demo
spec:
  provider: kms
  data: 
    - key: {Nama rahasia KMS}
      versionStage: {Tahap versi rahasia KMS}
      secretStoreRef:
        name: {Nama SecretStore}
        namespace: {Namespace SecretStore}
      jmesPath: # Mengurai beberapa bidang dalam string yaml
        - path: "name"
          objectAlias: "myname"
        - path: "friends[0].name"
          objectAlias: "friendname"

Penguraian otomatis rahasia YAML

Jika Anda tidak mengetahui struktur data rahasia YAML tetapi perlu mengurai rahasia dan menyimpan data yang diurai dalam Kubernetes Secret, Anda dapat mengonfigurasi parameter dataProcess.extract untuk mengaktifkan penguraian otomatis rahasia YAML. Selain itu, Anda dapat mengonfigurasi parameter dataProcess.replaceRule guna menentukan aturan penggantian kunci dalam data yang diurai, sehingga mencegah kegagalan pembuatan Kubernetes Secret akibat kunci data Secret yang tidak teratur.

Contoh rahasia YAML berikut disimpan di KMS Secrets Manager:

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

Buat ExternalSecret berdasarkan kode sampel berikut:

apiVersion: 'alibabacloud.com/v1alpha1'
kind: ExternalSecret
metadata:
  name: extract-secret
spec:
  provider: kms
  dataProcess:
    - extract:
        key: {Nama rahasia KMS}
        versionStage: ACSCurrent # Versi rahasia KMS.
        secretStoreRef:
          name: {Nama SecretStore}
          namespace: {Namespace SecretStore}
      replaceRule: # Aturan untuk mengganti kunci.
        - source: "^/.*d$" # Ganti kunci yang dimulai dengan garis miring (/) dan diakhiri dengan huruf kecil d dengan tom.
          target: "tom"
        - source: "^n.*/$" # Ganti kunci yang dimulai dengan huruf kecil n dan diakhiri dengan garis miring (/) dengan mark.
          target: "mark"

Konfigurasikan alamat endpoint KMS

Anda dapat mengakses KMS melalui gateway khusus atau gateway bersama. Untuk informasi lebih lanjut tentang perbedaan antara gateway bersama dan khusus, lihat Perbedaan antara Gateway Bersama dan Khusus untuk Mengakses KMS.

Aturan Prioritas Endpoint KMS

Tipe

Bidang

Tujuan

Prioritas

Deskripsi

Konfigurasi tingkat rahasia

ExternalSecret.spec.data.kmsEndpoint

Tentukan alamat endpoint untuk setiap rahasia KMS yang perlu diimpor.

Tertinggi

Konfigurasi ini memiliki prioritas untuk rahasia individu dan menggantikan konfigurasi global dan default.

Konfigurasi global

command.kmsEndpoint (parameter startup)

Digunakan untuk semua permintaan KMS.

Sedang

Konfigurasi ini memberikan alamat endpoint yang digunakan oleh rahasia KMS lainnya selain konfigurasi tingkat rahasia.

Konfigurasi default

Tidak ada

Digunakan saat alamat endpoint tidak dikonfigurasi.

Terendah

Alamat endpoint KMS default adalah kms-vpc.{region}.aliyuncs.com. Ganti {region} dengan wilayah tempat rahasia KMS berada.

apiVersion: "alibabacloud.com/v1alpha1"
kind: ExternalSecret
metadata:
  name: esdemo
spec:
  provider: kms
  data:
    - key: test-hangzhou # Alamat endpoint sebenarnya: Gunakan konfigurasi global jika ada. Jika tidak, gunakan konfigurasi default: kms-vpc.{region}.aliyuncs.com
      name: hangzhou-vpc
      versionId: v1
    - key: test-hangzhou # Alamat endpoint sebenarnya: Endpoint yang ditentukan oleh bidang kmsEndpoint adalah kms.cn-hangzhou.aliyuncs.com
      name: hangzhou-public
      versionId: v1
      kmsEndpoint: kms.cn-hangzhou.aliyuncs.com

Deskripsi Konfigurasi Endpoint KMS

Tipe gateway

Tipe domain

Endpoint

Deskripsi

Gateway khusus

Domain pribadi KMS

{kms-instance-id}.cryptoservice.kms.aliyuncs.com

  • Instans rahasia KMS dan kluster berada di wilayah dan virtual private cloud (VPC) yang sama.

  • Ganti {kms-instance-id} dengan ID instans rahasia KMS.

  • Versi instans rahasia KMS harus 3.0 atau lebih baru.

Gateway bersama

Domain VPC

kms-vpc.{region}.aliyuncs.com

  • Rahasia KMS dan kluster berada di wilayah yang sama.

  • Ganti {region} dengan wilayah tempat rahasia KMS berada.

  • Alamat ini dapat digunakan dengan konfigurasi default tanpa pengaturan tambahan.

Gateway bersama

Domain publik

kms.{region}.aliyuncs.com

  • Ganti {region} dengan wilayah tempat rahasia KMS berada.

  • Kluster dapat mengakses jaringan publik.

Referensi

Untuk mengamankan Kubernetes Secrets yang disinkronkan dari rahasia KMS dan disimpan di kluster ACK, aktifkan fitur Enkripsi Secret. Lihat Gunakan KMS untuk Mengenkripsi Kubernetes Secrets.