全部产品
Search
文档中心

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

更新时间:Dec 17, 2025

Anda dapat menggunakan fitur RAM Roles for Service Accounts (RRSA) untuk menerapkan kontrol akses pada pod berbeda yang dideploy di kluster Container Service for Kubernetes (ACK), sehingga mencapai kontrol izin API detail halus pada pod dan mengurangi risiko keamanan. Topik ini menjelaskan cara menggunakan RRSA di kluster ACK.

Informasi latar belakang

Instans kontainer elastis berjalan pada instans Elastic Compute Service (ECS). Metadata instans ECS berisi informasi tentang instans ECS di Alibaba Cloud. Anda dapat mengakses metadata ini dari dalam instans yang sedang berjalan untuk mengonfigurasi atau mengelolanya. Aplikasi yang dideploy di kluster ACK dapat menggunakan metadata instans ECS untuk memperoleh token Security Token Service (STS) guna mengasumsikan peran Resource Access Management (RAM) yang berbeda, sehingga dapat memanggil API layanan cloud yang berbeda. Untuk informasi selengkapnya, lihat Instance metadata.

image

Untuk alasan keamanan, ketika Anda perlu membatasi izin RAM untuk aplikasi berbeda dalam satu kluster, Anda harus menonaktifkan kemampuan mereka untuk memperoleh token STS yang terkait dengan peran instans melalui metadata instans ECS atau instans kontainer elastis, atau menghindari pemberian kebijakan RAM apa pun pada peran yang terkait instans. Namun, aplikasi tersebut tetap memerlukan metode aman untuk memperoleh token STS guna mengakses sumber daya cloud. Untuk mengatasi masalah ini, ACK merilis fitur RRSA yang dikembangkan berdasarkan RAM.

Anda dapat menggunakan fitur RRSA untuk mengizinkan aplikasi berbeda dalam kluster ACK mengasumsikan peran RAM yang berbeda. Aplikasi dapat memperoleh token STS, menggunakan token tersebut untuk mengasumsikan peran RAM tertentu, lalu mengakses layanan cloud terkait. Hal ini menerapkan prinsip hak istimewa minimal dan memungkinkan aplikasi memanggil operasi API tanpa perlu menggunakan pasangan Kunci Akses, sehingga mencegah kebocoran pasangan Kunci Akses.

image

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

  1. Penyewa mendeploy pod yang telah diaktifkan fitur service account token volume projection.

  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 memperoleh 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 tertentu. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.

    • Token OIDC dalam file token OIDC bersifat temporary. Kami menyarankan Anda mengonfigurasi aplikasi untuk membaca token terbaru dari file token OIDC tersebut. Kluster akan memperbarui token dalam file sebelum masa berlakunya habis.

  4. Aplikasi dalam pod menggunakan token STS untuk mengasumsikan peran RAM tertentu lalu memanggil API layanan cloud terkait.

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

  1. Penyewa mendeploy pod yang telah diaktifkan fitur service account token volume projection.

  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 memperoleh 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 tertentu. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.

    • Token OIDC dalam file token OIDC bersifat temporary. Kami menyarankan Anda mengonfigurasi aplikasi untuk membaca token terbaru dari file token OIDC tersebut. Kluster akan memperbarui token dalam file sebelum masa berlakunya habis.

  4. Aplikasi dalam pod menggunakan token STS untuk mengasumsikan peran RAM tertentu lalu memanggil API layanan cloud terkait.

Batasan

Fitur RRSA hanya mendukung kluster ACK yang menjalankan Kubernetes 1.22 ke atas. Kluster ACK yang mendukung fitur RRSA meliputi kluster ACK Basic, kluster ACK Pro, kluster ACK Serverless Basic, kluster ACK Serverless Pro, dan kluster ACK Edge Pro.

Aktifkan RRSA

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

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

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

Aktifkan saat pembuatan kluster

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

image

Aktifkan setelah pembuatan kluster

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

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

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

  4. Pada kotak dialog Enable RRSA, klik Confirm.

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

Dapatkan informasi URL dan ARN

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

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

  • Otomatis membuat issuer OIDC yang didedikasikan untuk kluster tersebut. Issuer OIDC ini dikelola oleh ACK. Untuk informasi selengkapnya, lihat OIDC Issuer.

  • Mengaktifkan service account token volume projection untuk kluster dan menggabungkan konfigurasi issuer OIDC dengan nilai parameter service-account-issuer yang sudah ada pada kluster. Untuk informasi selengkapnya, lihat Use ServiceAccount token volume projection.

  • Membuat penyedia identitas peran RAM dalam akun Anda. Penyedia identitas ini menggunakan issuer OIDC untuk Single Sign-On (SSO). Nama penyedia identitas tersebut adalah ack-rrsa-<cluster_id>. <cluster_id> menunjukkan ID kluster Anda. Untuk informasi selengkapnya, lihat Manage an OIDC IdP.

Bekerja dengan RRSA

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

Contoh

Pada contoh ini, sebuah aplikasi dibuat dan RRSA diaktifkan untuk kluster agar aplikasi dapat melakukan operasi berikut: mengasumsikan peran RAM tertentu lalu memanggil operasi API untuk mengkueri kluster yang termasuk dalam 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. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, pilih Operations > Add-ons.

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

    3. Pada pesan yang muncul, konfirmasi informasi lalu klik OK.

  2. Buat peran RAM bernama demo-role-for-rrsa. Tabel berikut menjelaskan parameter-parameternya. Untuk petunjuk lengkap, lihat Create a RAM role for an OIDC IdP.

    Parameter

    Deskripsi

    Identity Provider Type

    Pilih OIDC.

    Identity Provider

    Pilih IdP. IdP dinamai 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. Pada 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 pada Langkah 2 untuk memberikan izin yang diperlukan kepada aplikasi. Untuk informasi selengkapnya, lihat Grant permissions to a RAM role.

  4. Deploy aplikasi. Untuk informasi tentang demo SDK, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA.

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

      Pada templat YAML contoh 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 auto injection 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.3.0
            args:
              - rrsa
              - demo
            name: demo
        restartPolicy: OnFailure
    2. Jalankan perintah berikut untuk mendeploy aplikasi:

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

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

    Output yang diharapkan

    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
        - name: ALIBABA_CLOUD_STS_ENDPOINT
          value: sts-vpc.cn-hangzhou.aliyuncs.com
        - name: ALIBABA_CLOUD_STS_REGION
          value: cn-hangzhou
        - name: ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED
          value: "true"
        image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
        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 tersebut menunjukkan bahwa ack-pod-identity-webhook telah menyuntikkan konfigurasi berikut ke pod.

    Kategori

    Item konfigurasi

    Deskripsi

    Variabel lingkungan.

    ALIBABA_CLOUD_ROLE_ARN

    ARN peran RAM yang akan diasumsikan.

    ALIBABA_CLOUD_OIDC_PROVIDER_ARN

    ARN penyedia identitas OIDC.

    ALIBABA_CLOUD_STS_ENDPOINT

    Titik akhir VPC untuk STS di wilayah saat ini.

    ALIBABA_CLOUD_STS_REGION

    ID wilayah untuk STS.

    ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED

    Flag yang mengaktifkan atau menonaktifkan akses ke STS melalui titik akhir VPC privat. Tetapkan ke true untuk menggunakan titik akhir VPC.

    ALIBABA_CLOUD_OIDC_TOKEN_FILE

    Jalur 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 selengkapnya, lihat Remove permissions from a RAM role.

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

    kubectl -n rrsa-demo logs demo

    Pesan error 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}

Ubah templat aplikasi secara manual untuk mengaktifkan RRSA

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

Templat berikut memberikan contohnya.

Kode contoh

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.3.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-bidang berikut dalam templat di atas:

  • Ganti <oid_provider_arn> dengan ARN penyedia OIDC yang digunakan oleh kluster. Untuk informasi selengkapnya tentang cara memperoleh ARN, lihat Obtain the URL and ARN information.

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

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

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

Setelah Anda mendeploy ulang aplikasi berdasarkan templat yang dimodifikasi, aplikasi dapat menggunakan file token OIDC, ARN peran RAM, dan ARN penyedia OIDC yang Anda tentukan dalam templat untuk memanggil operasi AssumeRoleWithOIDC STS dan memperoleh 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 ALIBABA_CLOUD_ROLE_ARN, dan ARN penyedia OIDC ditentukan dalam ALIBABA_CLOUD_OIDC_PROVIDER_ARN. Aplikasi membaca token OIDC terbaru dari file token OIDC saat menggunakannya. Untuk informasi selengkapnya tentang demo SDK, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.

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

Jika Anda ingin aplikasi menggunakan peran RAM yang sudah ada, Anda harus mengubah kebijakan kepercayaan peran RAM tersebut berdasarkan templat berikut. Dengan cara ini, aplikasi dapat menggunakan akun layanan untuk mengasumsikan peran RAM dan memperoleh token STS. Untuk informasi selengkapnya, lihat Edit the trust policy of a RAM role.

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-bidang berikut dalam konfigurasi Statement:

  • Ganti <oidc_issuer_url> dengan URL penyedia OIDC yang digunakan oleh kluster. Untuk informasi selengkapnya tentang cara memperoleh URL, lihat Obtain the URL and ARN information.

  • Ganti <oidc_provider_arn> dengan ARN penyedia OIDC yang digunakan oleh kluster. Untuk informasi selengkapnya tentang cara memperoleh ARN, lihat Obtain the URL and ARN information.

  • Ganti <namespace> dengan namespace aplikasi.

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

Anda juga dapat menggunakan tool 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 mendukung autentikasi token OIDC RRSA. Tabel berikut menjelaskan versi SDK yang didukung dan demonya.

Bahasa pemrograman

Versi SDK yang didukung

Demo

Go

Alibaba Cloud Credentials for Go 1.2.6 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: Use OIDCRoleArn.

Demo SDK untuk Go

Java

Alibaba Cloud Credentials for Java 0.2.10 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: OIDCRoleArn.

Demo SDK untuk Java

Python 3

Alibaba Cloud Credentials for Python 0.3.1 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: OIDCRoleArn.

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 selengkapnya, lihat Method 6: Use the RAM role of an OIDC IdP.

Demo SDK untuk Node.js dan SDK untuk TypeScript

Untuk beberapa SDK layanan cloud, Anda dapat merujuk pada metode di atas untuk menggunakan token OIDC RRSA dalam autentikasi saat memanggil operasi API. Tabel berikut menjelaskan demo SDK tersebut.

Produk cloud

SDK

Demo

Object Storage Service (OSS)

OSS GO SDK

Untuk informasi selengkapnya, lihat Method 5: Use an OIDCRoleARN.

Demo SDK untuk Go

OSS Java SDK

Untuk informasi selengkapnya, lihat Configure access credentials.

Demo SDK untuk Java

OSS Python SDK

Untuk informasi selengkapnya, lihat Use the role of an OIDC IdP.

Demo SDK untuk Python

Simple Log Service

Simple Log Service SDK for Java

Untuk informasi selengkapnya, lihat Get started with Simple Log Service SDK for Java.

Demo SDK untuk Java

Solusi untuk error SDK

Tabel berikut menjelaskan solusi untuk berbagai error.

Pesan error

Kemungkinan penyebab

Solusi

{
 "Code": "AuthenticationFail.OIDCToken.Expired",
 "Message": "This JsonWebToken is expired."
}

Token OIDC yang digunakan 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 menyarankan Anda menggunakan SDK Alibaba Cloud untuk memperoleh token OIDC daripada mengonfigurasi aplikasi secara manual untuk memperoleh token. Untuk informasi selengkapnya, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA.

{
 "Code": "Throttling.User",
 "Message": "Request was denied due to user flow control."
}

Aplikasi Anda sering memperoleh token OIDC. Akibatnya, operasi tersebut dibatasi lajunya.

Jangan sering memanggil operasi API untuk memperoleh token OIDC. Anda tidak perlu memperoleh token OIDC baru sebelum token OIDC saat ini kedaluwarsa. Kami menyarankan Anda menggunakan SDK Alibaba Cloud untuk memperoleh token OIDC daripada mengonfigurasi aplikasi secara manual untuk memperoleh token. Untuk informasi selengkapnya, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA.

{
 "Code": "AuthenticationFail.OIDCToken.AudienceNotMatch",
 "Message": "Invalid audience."
}

Parameter audience dalam templat aplikasi Anda tidak ditetapkan ke sts.aliyuncs.com.

Anda perlu mengubah templat aplikasi untuk memastikan parameter audience ditetapkan ke sts.aliyuncs.com.

{
 "Code": "AuthenticationFail.OIDCToken.IssuerConfigurationBroken",
 "Message": "Get public keys from OIDC Provider failed, the issuer is https://kubernetes.default.svc."
}
{
 "Code": "AuthenticationFail.OIDCToken.IssuerNotMatch",
 "Message": "The issuer in the OIDC Token doesn't match the OIDC Provider registered."
}
{
 "Code": "AuthenticationFail.NoPermission",
 "Message": "No such OIDC Provider registered."
}

Fitur RRSA dinonaktifkan untuk kluster Anda.

Anda perlu mengaktifkan fitur RRSA untuk kluster tempat aplikasi berada. Untuk informasi selengkapnya, lihat Enable the RRSA feature. Setelah Anda mengaktifkan fitur RRSA, Anda harus membuat ulang pod yang menggunakan fitur RRSA.

{
 "Code": "EntityNotExist.Role",
 "Message": "The role not exists: acs:ram::19981***:role/***. "
}

Peran RAM yang diasumsikan aplikasi Anda tidak ada.

Anda harus membuat peran RAM yang diperlukan. Untuk informasi selengkapnya, lihat Create a RAM role for an OIDC IdP dan Example.

{
  "Code": "AuthenticationFail.NoPermission",
  "Message": "There is no permission"
}

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

Anda perlu mengubah kebijakan kepercayaan peran RAM untuk mengizinkan aplikasi Anda mengasumsikan peran RAM tersebut. Untuk informasi selengkapnya, lihat Use an existing RAM role and grant the required permissions to the RAM role.

Aktifkan CLI umum untuk mendukung autentikasi token OIDC RRSA

Anda dapat menggunakan ack-ram-tool untuk mengaktifkan CLI umum (seperti Alibaba Cloud CLI, ossutil 2.0, dan Terraform) agar mendukung autentikasi token OIDC RRSA di 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 ke OIDC untuk mendukung autentikasi token OIDC RRSA. Untuk detailnya, lihat Credential types.

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 di 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 command line interface 2.0

Untuk menggunakan token OIDC RRSA, tetapkan opsi mode ke oidcRoleArn dalam file konfigurasi ~/.ossutilconfig. Untuk detailnya, lihat Configuration examples.

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

  • Ganti nilai region default dalam file konfigurasi dengan wilayah aktual 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 mengubah 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 di 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 Alibaba Cloud Provider 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

\