全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan RRSA untuk mengizinkan pod yang berbeda mengakses layanan cloud yang berbeda

更新时间:Sep 04, 2025

Anda dapat menggunakan fitur RAM Roles for Service Accounts (RRSA) untuk menegakkan kontrol akses pada pod yang berbeda dalam kluster Container Service for Kubernetes (ACK). Fitur ini memungkinkan kontrol izin API yang lebih halus pada pod dan mengurangi risiko keamanan. Topik ini menjelaskan cara menggunakan RRSA di kluster ACK.

Informasi latar belakang

Contoh kontainer elastis berjalan pada instance Elastic Compute Service (ECS). Metadata instance ECS berisi informasi tentang instance ECS dalam Alibaba Cloud. Anda dapat mengakses metadata ini dari dalam instance yang sedang berjalan untuk mengonfigurasi atau mengelolanya. Aplikasi yang diterapkan dalam kluster ACK dapat menggunakan metadata instance ECS untuk mendapatkan token Security Token Service (STS) yang digunakan untuk mengasumsikan peran Resource Access Management (RAM) yang berbeda. Dengan cara ini, aplikasi dapat memanggil API layanan cloud yang berbeda. Untuk informasi lebih lanjut, lihat Metadata Instance.

Untuk tujuan keamanan, ketika Anda perlu membatasi izin RAM untuk aplikasi yang berbeda dalam kluster, Anda harus menonaktifkan kemampuan mereka untuk mendapatkan token STS yang terkait dengan peran instance melalui ECS atau metadata instance kontainer elastis, atau menghindari memberikan kebijakan RAM apa pun kepada peran yang terkait dengan instance. Namun, aplikasi ini masih memerlukan metode yang aman untuk mendapatkan token STS untuk mengakses sumber daya cloud. Untuk mengatasi masalah ini, ACK merilis fitur RRSA yang dikembangkan berdasarkan RAM.

Anda dapat menggunakan fitur RRSA untuk mengizinkan aplikasi yang berbeda dalam kluster ACK mengasumsikan peran RAM yang berbeda. Aplikasi dapat memperoleh token STS, menggunakan token tersebut untuk mengasumsikan peran RAM tertentu, dan kemudian mengakses layanan cloud yang relevan. Ini menegakkan prinsip hak istimewa minimal dan memungkinkan aplikasi untuk memanggil operasi API tanpa perlu menggunakan pasangan AccessKey, yang mencegah kebocoran pasangan AccessKey.

Langkah-langkah berikut menunjukkan bagaimana aplikasi mengakses sumber daya cloud ketika RRSA digunakan untuk menegakkan kontrol akses:

  1. Penyewa menerapkan pod yang memiliki fitur proyeksi volume token akun layanan diaktifkan.

  2. Kluster ACK membuat file token OpenID Connect (OIDC) akun layanan dan memasang file token tersebut ke pod.

  3. Aplikasi dalam pod menggunakan file token OIDC untuk memanggil operasi API AssumeRoleWithOIDC STS dan mendapatkan token STS yang digunakan untuk mengasumsikan peran RAM.

    Catatan
    • Untuk mengizinkan aplikasi melakukan operasi ini, Anda harus terlebih dahulu membuat penyedia identitas OIDC dan mengizinkan akun layanan yang digunakan oleh pod untuk mengasumsikan peran RAM yang ditentukan. Untuk informasi lebih lanjut, lihat AssumeRoleWithOIDC.

    • Token OIDC dalam file token OIDC adalah token sementara. Kami sarankan Anda mengonfigurasi aplikasi untuk membaca token terbaru dari file token OIDC. Kluster memperbarui token dalam file token OIDC sebelum token tersebut kedaluwarsa.

  4. Aplikasi dalam pod menggunakan token STS untuk mengasumsikan peran RAM yang ditentukan dan kemudian memanggil API layanan cloud yang relevan.

Langkah-langkah berikut menjelaskan cara aplikasi mengakses sumber daya cloud menggunakan RRSA untuk menegakkan kontrol akses:

  1. Penyewa menerapkan pod dengan fitur proyeksi volume token akun layanan diaktifkan.

  2. Kluster ACK membuat file token OpenID Connect (OIDC) akun layanan dan memasang file tersebut ke dalam pod.

  3. Aplikasi dalam pod menggunakan file token OIDC untuk memanggil operasi API AssumeRoleWithOIDC STS dan mendapatkan token STS yang digunakan untuk mengasumsikan peran RAM.

    Catatan
    • Untuk mengizinkan aplikasi melakukan operasi ini, Anda harus terlebih dahulu membuat penyedia identitas OIDC dan memberi izin kepada akun layanan yang digunakan oleh pod untuk mengasumsikan peran RAM yang ditentukan. Untuk informasi lebih lanjut, lihat AssumeRoleWithOIDC.

    • Token OIDC dalam file token OIDC bersifat sementara. Kami sarankan Anda mengonfigurasi aplikasi untuk membaca token terbaru dari file token OIDC. Kluster akan memperbarui token dalam file sebelum token tersebut kedaluwarsa.

  4. Aplikasi dalam pod menggunakan token STS untuk mengasumsikan peran RAM yang ditentukan dan memanggil API layanan cloud yang relevan.

Batasan

Fitur RRSA hanya mendukung kluster ACK yang menjalankan Kubernetes 1.22 dan versi lebih baru. Kluster ACK yang mendukung fitur RRSA termasuk kluster Dasar ACK, kluster Pro ACK, kluster Serverless Dasar ACK, kluster Serverless Pro ACK, dan kluster Edge Pro ACK.

Aktifkan RRSA

Jika Anda tidak memiliki kluster yang ada, aktifkan RRSA saat Anda membuat kluster ACK yang dikelola atau kluster Edge ACK. Jika tidak, aktifkan di bagian Security and Auditing halaman detail kluster.

Untuk kluster Serverless ACK, fitur ini harus diaktifkan setelah pembuatan dari bagian Security and Auditing halaman detail kluster.
Penting

Setelah fitur RRSA diaktifkan, periode validitas maksimum untuk semua token ServiceAccount yang baru dibuat akan dibatasi hingga 12 jam.

Aktifkan selama pembuatan kluster

Saat Anda membuat kluster ACK yang dikelola atau kluster Edge ACK, klik Enable di sebelah RRSA OIDC di bagian Advanced Options (Optional) langkah Cluster Configurations.

image

Aktifkan setelah pembuatan kluster

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

  2. Di halaman Clusters, temukan kluster target dan klik namanya. Di panel navigasi kiri, klik Cluster Information.

  3. Di bagian Security and Auditing tab Basic Information, klik Enable di sebelah RRSA OIDC.image

  4. Di kotak dialog Enable RRSA, klik Confirm.

    Di bagian Basic Information, jika status kluster berubah dari Updating menjadi Running, fitur RRSA telah diaktifkan untuk kluster.

Peroleh informasi URL dan ARN

Setelah fitur RRSA diaktifkan untuk kluster, navigasikan ke bagian Security and Auditing di bawah tab Basic Information. Jika Anda mengarahkan mouse ke label Enabled di sebelah RRSA OIDC, URL dan Nama Sumber Daya Alibaba Cloud (ARN) dari penyedia OIDC akan ditampilkan. image

Setelah RRSA diaktifkan, ACK melakukan operasi berikut di latar belakang:

  • Secara otomatis membuat penerbit OIDC yang didedikasikan untuk kluster. Penerbit OIDC dikelola oleh ACK. Untuk informasi lebih lanjut, lihat Penerbit OIDC.

  • Mengaktifkan proyeksi volume token akun layanan untuk kluster dan menggabungkan konfigurasi penerbit OIDC dengan nilai parameter service-account-issuer yang ada dari kluster. Untuk informasi lebih lanjut, lihat Gunakan Proyeksi Volume Token ServiceAccount.

  • Membuat penyedia identitas peran RAM dalam akun Anda. Penyedia identitas menggunakan penerbit OIDC untuk Single Sign-On (SSO). Penyedia identitas diberi nama ack-rrsa-<cluster_id>. <cluster_id> menunjukkan ID kluster Anda. Untuk informasi lebih lanjut, lihat Kelola Penyedia Identitas OIDC.

Bekerja dengan RRSA

Setelah Anda mengaktifkan RRSA untuk kluster Anda, lakukan langkah-langkah berikut untuk mengizinkan aplikasi dalam kluster mendapatkan token STS melalui RRSA. Token STS digunakan untuk memanggil API layanan cloud tertentu.

Contoh

Dalam contoh ini, aplikasi dibuat dan RRSA diaktifkan untuk kluster untuk mengizinkan aplikasi melakukan operasi berikut: mengasumsikan peran RAM yang ditentukan dan kemudian memanggil operasi API untuk menanyakan kluster yang dimiliki oleh akun Alibaba Cloud saat ini.

Sample configurations

  • Namespace: rrsa-demo

  • Akun Layanan: demo-sa

  • Peran RAM: demo-role-for-rrsa

Procedure

使用示例流程

  1. Instal komponen ack-pod-identity-webhook.

    1. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, pilih Operations > Add-ons.

    2. Di halaman Add-ons, klik tab Security, temukan ack-pod-identity-webhook, dan klik Install di bagian kanan bawah kartu.

    3. Dalam pesan yang muncul, konfirmasikan informasi dan klik OK.

  2. Buat peran RAM bernama demo-role-for-rrsa. Tabel berikut menjelaskan parameter. Untuk instruksi terperinci, lihat Buat Peran RAM untuk Penyedia Identitas OIDC.

    Parameter

    Deskripsi

    Identity Provider Type

    Pilih OIDC.

    Identity Provider

    Pilih IdP. IdP diberi nama dalam format ack-rrsa-<cluster_id>. <cluster_id> menunjukkan ID kluster Anda.

    Conditions

    • oidc:iss: Gunakan nilai default.

    • oidc:aud: Gunakan nilai default.

    • oidc:sub: Tambahkan kondisi ini secara manual.

      • Key: Pilih oidc:sub.

      • Operator: Pilih StringEquals.

      • Value: Masukkan system:serviceaccount:<namespace>:<serviceAccountName>.

        • <namespace>: Tentukan namespace aplikasi.

        • <serviceAccountName>: Tentukan nama akun layanan. Dalam contoh ini, masukkan system:serviceaccount:rrsa-demo:demo-sa.

    RAM Role Name

    Tetapkan nilainya menjadi demo-role-for-rrsa.

  3. Lampirkan kebijakan AliyunCSReadOnlyAccess ke peran RAM yang dibuat di Langkah 2 untuk memberikan izin yang diperlukan kepada aplikasi. Untuk informasi lebih lanjut, lihat Berikan Izin kepada Peran RAM.

  4. Terapkan aplikasi. Untuk informasi lebih lanjut tentang demo SDK, lihat Demo SDK Alibaba Cloud yang Mendukung Autentikasi Token OIDC RRSA.

    1. Buat file bernama demo.yaml berdasarkan persyaratan berikut:

      Dalam template YAML sampel berikut, label pod-identity.alibabacloud.com/injection: 'on' ditambahkan ke namespace, anotasi pod-identity.alibabacloud.com/role-name: demo-role-for-rrsa ditambahkan ke akun layanan, dan fitur injeksi otomatis ack-pod-identity-webhook diaktifkan. Untuk informasi lebih lanjut tentang cara mengonfigurasi ack-pod-identity-webhook, lihat ack-pod-identity-webhook.

      View sample code

      ---
      apiVersion: v1
      kind: Namespace
      metadata:
        name: rrsa-demo
        labels:
          pod-identity.alibabacloud.com/injection: 'on'
      
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: demo-sa
        namespace: rrsa-demo
        annotations:
          pod-identity.alibabacloud.com/role-name: demo-role-for-rrsa
      
      ---
      apiVersion: v1
      kind: Pod
      metadata:
        name: demo
        namespace: rrsa-demo
      spec:
        serviceAccountName: demo-sa
        containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.2.0
            imagePullPolicy: "Always"
            args:
              - rrsa
              - demo
              - --region=cn-hangzhou
            name: demo
        restartPolicy: OnFailure
    2. Jalankan perintah berikut untuk menerapkan aplikasi:

      kubectl apply -f demo.yaml
  5. Jalankan perintah berikut untuk memeriksa apakah ack-pod-identity-webhook telah menyuntikkan konfigurasi yang diperlukan ke dalam pod yang dibuat untuk aplikasi:

    kubectl -n rrsa-demo get pod demo -o yaml

    Expected output

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo
      namespace: rrsa-demo
    spec:
      containers:
      - args:
        - rrsa
        - demo
        env:
        - name: ALIBABA_CLOUD_ROLE_ARN
          value: acs:ram::1***:role/demo-role-for-rrsa
        - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
          value: acs:ram::1***:oidc-provider/ack-rrsa-c***
        - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
          value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
        image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0
        imagePullPolicy: Always
        name: demo
        volumeMounts:
        - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
          name: kube-api-access-4bwdg
          readOnly: true
        - mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
          name: rrsa-oidc-token
          readOnly: true
      restartPolicy: OnFailure
      serviceAccount: demo-sa
      serviceAccountName: demo-sa
      volumes:
      - name: kube-api-access-4bwdg
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              expirationSeconds: 3607
              path: token
          - configMap:
              items:
              - key: ca.crt
                path: ca.crt
              name: kube-root-ca.crt
          - downwardAPI:
              items:
              - fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
                path: namespace
      - name: rrsa-oidc-token
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              audience: sts.aliyuncs.com
              expirationSeconds: 3600
              path: token

    Output menunjukkan bahwa ack-pod-identity-webhook telah menyuntikkan konfigurasi berikut ke dalam pod.

    Kategori

    Item konfigurasi

    Deskripsi

    Variabel lingkungan.

    ALIBABA_CLOUD_ROLE_ARN

    ARN dari peran RAM yang akan diasumsikan.

    ALIBABA_CLOUD_OIDC_PROVIDER_ARN

    ARN dari penyedia OIDC IdP.

    ALIBABA_CLOUD_OIDC_TOKEN_FILE

    Path file token OIDC.

    VolumeMount

    rrsa-oidc-token

    Konfigurasi untuk memasang token OIDC.

    Volume

    rrsa-oidc-token

    Konfigurasi untuk memasang token OIDC.

  6. Jalankan perintah berikut untuk mencetak log aplikasi:

    kubectl -n rrsa-demo logs demo

    Daftar kluster ditampilkan dalam output:

    cluster id: cf***, cluster name: foo*
    cluster id: c8***, cluster name: bar*
    cluster id: c4***, cluster name: foob*
  7. Opsional: Lepaskan kebijakan sistem AliyunCSReadOnlyAccess dari peran RAM. Untuk informasi lebih lanjut, lihat Hapus Izin dari Peran RAM.

    Tunggu 30 detik dan jalankan perintah berikut untuk mencetak log aplikasi lagi:

    kubectl -n rrsa-demo logs demo

    Pesan kesalahan berikut menunjukkan bahwa aplikasi tidak memiliki izin yang diperlukan:

       StatusCode: 403
       Code: StatusForbidden
       Message: code: 403, STSToken policy Forbidden for action cs:DescribeClustersForRegion request id: E78A2E2D-***
       Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClustersForRegion","AuthPrincipalDisplayName":"demo-role-for-rrsa:ack-ram-tool","AuthPrincipalOwnerId":"11***","AuthPrincipalType":"AssumedRoleUser","NoPermissionType":"ImplicitDeny","PolicyType":"ResourceGroupLevelIdentityBasedPolicy"},"code":"StatusForbidden","message":"STSToken policy Forbidden for action cs:DescribeClustersForRegion","requestId":"E78A2E2D-***","status":403,"statusCode":403}

Modifikasi manual template aplikasi untuk mengaktifkan RRSA

Anda dapat secara manual menentukan file token OIDC yang diperlukan sebagai variabel lingkungan dalam template aplikasi. Dengan cara ini, Anda dapat mengaktifkan RRSA tanpa menginstal ack-pod-identity-webhook.

Template berikut memberikan contoh.

View sample code

apiVersion: v1
kind: Pod
metadata:
  name: demo
  namespace: rrsa-demo
spec:
  containers:
  - args:
    - rrsa
    - demo
    env:
    - name: ALIBABA_CLOUD_ROLE_ARN
      value: <role_arn>
    - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
      value: <oid_provider_arn>
    - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
      value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
    image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0
    imagePullPolicy: Always
    name: demo
    volumeMounts:
    - mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
      name: rrsa-oidc-token
      readOnly: true
  restartPolicy: OnFailure
  serviceAccount: demo-sa
  serviceAccountName: demo-sa
  volumes:
  - name: rrsa-oidc-token
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          audience: sts.aliyuncs.com
          expirationSeconds: 3600
          path: token
Penting

Ubah bidang berikut dalam template sebelumnya:

  • Ganti <oid_provider_arn> dengan ARN dari penyedia OIDC yang digunakan oleh kluster. Untuk informasi lebih lanjut tentang cara mendapatkan ARN, lihat Peroleh Informasi URL dan ARN.

  • Ganti <role_arn> dengan ARN dari peran RAM yang digunakan oleh aplikasi. Anda dapat memperoleh ARN di halaman Roles di Konsol RAM.

  • Tetapkan parameter audience menjadi sts.aliyuncs.com. Nilai ini adalah ID klien yang dikonfigurasi dalam OIDC IdP yang dibuat secara otomatis saat fitur RRSA diaktifkan. Nilai ini bukan domain yang digunakan oleh SDK untuk memanggil operasi AssumeRoleWithOIDC STS. Anda dapat menentukan domain STS yang sesuai saat menggunakan SDK.

  • Tetapkan expirationSeconds ke nilai dari 600 hingga 43200. Unit: detik. Jika Anda menentukan nilai lebih besar dari 43200, periode validitas token OIDC tetap 43.200 detik (12 jam).

Setelah Anda menerapkan ulang aplikasi berdasarkan template yang dimodifikasi, aplikasi dapat menggunakan file token OIDC, ARN peran RAM, dan ARN penyedia OIDC yang Anda tentukan dalam template untuk memanggil operasi AssumeRoleWithOIDC STS dan mendapatkan token STS yang digunakan untuk mengasumsikan peran RAM tertentu. Dengan cara ini, aplikasi dapat memanggil operasi API layanan cloud yang berbeda. File token OIDC ditentukan dalam variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE, ARN peran RAM ditentukan dalam variabel lingkungan ALIBABA_CLOUD_ROLE_ARN, dan ARN penyedia OIDC ditentukan dalam variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN. Aplikasi membaca token OIDC terbaru dari file token OIDC saat menggunakan file tersebut. Untuk informasi lebih lanjut tentang demo SDK, lihat Demo SDK Alibaba Cloud yang Mendukung Autentikasi Token OIDC RRSA. Untuk informasi lebih lanjut, lihat AssumeRoleWithOIDC.

Gunakan peran RAM yang ada dan berikan izin yang diperlukan kepada peran RAM

Jika Anda ingin aplikasi menggunakan peran RAM yang ada, Anda harus memodifikasi kebijakan kepercayaan peran RAM berdasarkan template berikut. Dengan cara ini, aplikasi dapat menggunakan akun layanan untuk mengasumsikan peran RAM dan mendapatkan token STS. Untuk informasi lebih lanjut, lihat Edit Kebijakan Kepercayaan Peran RAM.

Contoh konfigurasi Statement:

{
  "Action": "sts:AssumeRole",
  "Condition": {
    "StringEquals": {
      "oidc:aud": "sts.aliyuncs.com",
      "oidc:iss": "<oidc_issuer_url>",
      "oidc:sub": "system:serviceaccount:<namespace>:<service_account>"
    }
  },
  "Effect": "Allow",
  "Principal": {
    "Federated": [
      "<oidc_provider_arn>"
    ]
  }
}
Penting

Ubah bidang berikut dalam konfigurasi Statement:

  • Ganti <oidc_issuer_url> dengan URL penyedia OIDC yang digunakan oleh kluster. Untuk informasi lebih lanjut tentang cara mendapatkan URL, lihat Peroleh Informasi URL dan ARN.

  • Ganti <oidc_provider_arn> dengan ARN penyedia OIDC yang digunakan oleh kluster. Untuk informasi lebih lanjut tentang cara mendapatkan ARN, lihat Peroleh Informasi URL dan ARN.

  • Ganti <namespace> dengan namespace aplikasi.

  • Ganti <service_account> dengan akun layanan yang digunakan oleh aplikasi.

Anda juga dapat menggunakan alat ack-ram-tool untuk mengotomatiskan modifikasi kebijakan kepercayaan. Contoh perintah:

ack-ram-tool rrsa associate-role --cluster-id <cluster_id> \
    --namespace <namespace> --service-account <service_account> \
    --role-name <role_name> --create-role-if-not-exist

Demo SDK Alibaba Cloud yang mendukung autentikasi token OIDC RRSA

Demo SDK

Alibaba Cloud SDK V2.0 mendukung autentikasi token OIDC RRSA. Secara default, semua SDK layanan cloud yang mendukung autentikasi token STS dan dikembangkan berdasarkan Alibaba Cloud SDK V2.0 juga mendukung autentikasi token OIDC RRSA. Tabel berikut mencantumkan versi SDK yang didukung beserta demo terkait.

Bahasa pemrograman

Versi SDK yang didukung

Demo

Go

Alibaba Cloud Credentials for Go 1.2.6 dan yang lebih baru. Untuk informasi lebih lanjut, lihat Metode 6: Gunakan OIDC RoleArn.

Demo SDK untuk Go

Java

Alibaba Cloud Credentials for Java 0.2.10 dan yang lebih baru. Untuk informasi lebih lanjut, lihat Metode 6: Gunakan peran RAM dari OIDC IdP.

Demo SDK untuk Java

Python 3

Alibaba Cloud Credentials for Python 0.3.1 dan yang lebih baru. Untuk informasi lebih lanjut, lihat Metode 6: Gunakan peran RAM dari OIDC IdP.

Demo SDK untuk Python 3

Node.js dan TypeScript

Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 dan yang lebih baru. Untuk informasi lebih lanjut, lihat Metode 6: Gunakan peran RAM dari OIDC IdP.

Demo SDK untuk Node.js dan Demo SDK untuk TypeScript

Untuk beberapa SDK layanan cloud, Anda dapat menggunakan metode sebelumnya untuk melakukan autentikasi menggunakan token OIDC RRSA saat memanggil operasi API. Tabel berikut menampilkan informasi lebih lanjut mengenai demo SDK.

Produk cloud

SDK

Demo

Layanan Penyimpanan Objek (OSS)

OSS GO SDK

Untuk informasi lebih lanjut, lihat Metode 5: Gunakan OIDCRoleARN.

Demo SDK untuk Go

OSS Java SDK

Untuk informasi lebih lanjut, lihat Konfigurasikan kredensial akses.

Demo SDK untuk Java

OSS Python SDK

Untuk informasi lebih lanjut, lihat Gunakan peran dari OIDC IdP.

Demo SDK untuk Python

Layanan Log Sederhana

Simple Log Service SDK untuk Java

Untuk informasi lebih lanjut, lihat Mulai dengan Simple Log Service SDK untuk Java.

Demo SDK untuk Java

Solusi untuk kesalahan SDK

Tabel berikut menjelaskan solusi untuk berbagai kesalahan.

Pesan Kesalahan

Penyebab Potensial

Solusi

{
 "Code": "AuthenticationFail.OIDCToken.Expired",
 "Message": "JsonWebToken ini telah kedaluwarsa."
}

Token OIDC yang digunakan oleh aplikasi Anda telah kedaluwarsa.

File token OIDC ditentukan dalam variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE. Anda perlu membaca token OIDC terbaru setiap kali menggunakan file tersebut. Kami sarankan Anda menggunakan SDK Alibaba Cloud untuk mendapatkan token OIDC daripada mengonfigurasi aplikasi secara manual untuk mendapatkan token. Untuk informasi lebih lanjut, lihat Demo SDK Alibaba Cloud yang Mendukung Autentikasi Token OIDC RRSA.

{
 "Code": "Throttling.User",
 "Message": "Permintaan ditolak karena kontrol aliran pengguna."
}

Aplikasi Anda sering mendapatkan token OIDC. Akibatnya, operasi dibatasi.

Jangan sering memanggil operasi API untuk mendapatkan token OIDC. Anda tidak perlu mendapatkan token OIDC baru sebelum token OIDC saat ini kedaluwarsa. Kami sarankan Anda menggunakan SDK Alibaba Cloud untuk mendapatkan token OIDC daripada mengonfigurasi aplikasi secara manual untuk mendapatkan token. Untuk informasi lebih lanjut, lihat Demo SDK Alibaba Cloud yang Mendukung Autentikasi Token OIDC RRSA.

{
 "Code": "AuthenticationFail.OIDCToken.AudienceNotMatch",
 "Message": "Audience tidak valid."
}

Parameter audience dalam template aplikasi Anda tidak diatur ke sts.aliyuncs.com.

Anda perlu memodifikasi template aplikasi untuk memastikan bahwa parameter audience diatur ke sts.aliyuncs.com.

{
 "Code": "AuthenticationFail.OIDCToken.IssuerConfigurationBroken",
 "Message": "Mendapatkan kunci publik dari Penyedia OIDC gagal, penerbit adalah https://kubernetes.default.svc."
}
{
 "Code": "AuthenticationFail.OIDCToken.IssuerNotMatch",
 "Message": "Penerbit dalam Token OIDC tidak sesuai dengan Penyedia OIDC yang terdaftar."
}
{
 "Code": "AuthenticationFail.NoPermission",
 "Message": "Tidak ada Penyedia OIDC yang terdaftar."
}

Fitur RRSA dinonaktifkan untuk kluster Anda.

Anda perlu mengaktifkan fitur RRSA untuk kluster tempat aplikasi berada. Untuk informasi lebih lanjut, lihat Aktifkan Fitur RRSA. Setelah Anda mengaktifkan fitur RRSA, Anda harus membuat ulang pod yang menggunakan fitur RRSA.

{
 "Code": "EntityNotExist.Role",
 "Message": "Peran tidak ada: acs:ram::19981***:role/***. "
}

Peran RAM yang diasumsikan oleh aplikasi Anda tidak ada.

Anda harus membuat peran RAM yang diperlukan. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk OIDC IdP dan Contoh.

{
  "Code": "AuthenticationFail.NoPermission",
  "Message": "Tidak ada izin"
}

Kebijakan kepercayaan yang diperlukan tidak dikonfigurasikan untuk peran RAM yang diasumsikan oleh aplikasi Anda.

Anda perlu memodifikasi kebijakan kepercayaan peran RAM untuk mengizinkan aplikasi Anda mengasumsikan peran RAM. Untuk informasi lebih lanjut, lihat Gunakan Peran RAM yang Ada dan Berikan Izin yang Diperlukan kepada Peran RAM.

Aktifkan CLI yang umum digunakan untuk mendukung autentikasi token OIDC RRSA

Anda dapat menggunakan ack-ram-tool untuk mengaktifkan CLI yang umum digunakan (seperti Alibaba Cloud CLI, ossutil 2.0, dan Terraform) untuk mendukung autentikasi token OIDC RRSA dalam pod. Tabel berikut menjelaskan konfigurasi dan contohnya.

Perluas untuk Melihat Detail Konfigurasi

CLI

Metode konfigurasi

Contoh

Alibaba Cloud CLI

Tetapkan parameter mode dalam file ~/.aliyun/config.json menjadi OIDC untuk mendukung autentikasi token OIDC RRSA. Untuk detailnya, lihat Jenis kredensial.

Catatan
  • Hanya Alibaba Cloud CLI v3.0.206 dan yang lebih baru yang mendukung fitur ini.

  • Tetapkan nilai region_id ke wilayah yang diinginkan.

{
  "current": "rrsa",
  "profiles": [
    {
      "name": "rrsa",
      "mode": "OIDC",
      "region_id": "cn-hangzhou",
      "ram_session_name": "test-rrsa"
    }
  ],
  "meta_path": ""
}
$ aliyun sts GetCallerIdentity
{
    "AccountId": "11380***",
    "Arn": "acs:ram::1138***:assumed-role/test-rrsa-***/test-rrsa",
    "IdentityType": "AssumedRoleUser",
    "PrincipalId": "33300***:test-rrsa",
    "RequestId": "20F78881-F47E-5771-90D6-***",
    "RoleId": "33300***"
}

Anda juga dapat langsung menjalankan perintah terkait dalam Alibaba Cloud CLI tanpa membuat file konfigurasi.

Catatan

Hanya Alibaba Cloud CLI v3.0.206 dan yang lebih baru yang mendukung fitur ini.

$ aliyun sts GetCallerIdentity --region cn-hangzhou --role-session-name=test-rrsa
{
	"AccountId": "11380***",
	"Arn": "acs:ram::1138***:assumed-role/test-rrsa-***/test-rrsa",
	"IdentityType": "AssumedRoleUser",
	"PrincipalId": "33300***:test-rrsa",
	"RequestId": "20F78881-F47E-5771-90D6-***",
	"RoleId": "33300***"
}

ossutil 2.0

Untuk menggunakan token OIDC RRSA, tetapkan opsi mode menjadi oidcRoleArn dalam file konfigurasi ~/.ossutilconfig Anda. Untuk detailnya, lihat Contoh.

Catatan
  • Fitur ini hanya didukung dalam ossutil V2.1.0 dan yang lebih baru.

  • Ganti nilai default region dalam file konfigurasi dengan wilayah sebenarnya Anda.

cat <<EOF > ~/.ossutilconfig
[default]
mode = oidcRoleArn
OIDCProviderArn = "${ALIBABA_CLOUD_OIDC_PROVIDER_ARN}"
OIDCTokenFilePath = "${ALIBABA_CLOUD_OIDC_TOKEN_FILE}"
roleArn = "${ALIBABA_CLOUD_ROLE_ARN}"
roleSessionName = test-rrsa
region = cn-hangzhou
EOF
$ ossutil api describe-regions
<RegionInfoList>
  <RegionInfo>
    <Region>oss-us-west-1</Region>
    <InternetEndpoint>oss-us-west-1.aliyuncs.com</InternetEndpoint>
    <InternalEndpoint>oss-us-west-1-internal.aliyuncs.com</InternalEndpoint>
    <AccelerateEndpoint>oss-accelerate.aliyuncs.com</AccelerateEndpoint>
  </RegionInfo>
  ...
</RegionInfoList>

Simple Log Service CLI

Anda tidak dapat memodifikasi file konfigurasi Simple Log Service CLI untuk mendukung autentikasi token OIDC RRSA. Anda harus menjalankan perintah ack-ram-tool export-credentials -f environment-variables -- aliyunlog dalam Simple Log Service CLI.

$ ack-ram-tool export-credentials -f environment-variables -- aliyunlog log list_project --region-endpoint=cn-hangzhou.log.aliyuncs.com

{"count": 1, "projects": [
{"createTime": "1676282996", "description": "k8s log project, ***",
 "lastModifyTime": "1676282996", "owner": "", "projectName": "k8s-log-c0edc***", 
 "region": "cn-hangzhou", "resourceGroupId": "rg-***", "status": "Normal"}],
  "total": 24}

Terraform

Anda dapat mengonfigurasi parameter assume_role_with_oidc dalam file konfigurasi untuk mendukung autentikasi token OIDC RRSA.

Catatan
  • Hanya Penyedia Alibaba Cloud V1.222.0 dan yang lebih baru yang mendukung parameter ini.

  • Tetapkan parameter region dalam file konfigurasi ke wilayah yang diinginkan.

provider "alicloud" {
  assume_role_with_oidc {
    role_session_name = "terraform-with-rrsa-auth-example"
  }
  region = "cn-hangzhou"
}

Contoh Terraform

Referensi

\