Todos os produtos
Search
Central de documentação

Container Compute Service:Configure pod-level permissions with RRSA

Última atualização: Sep 29, 2026

O RAM Roles for Service Accounts (RRSA) permite implementar isolamento de permissões openapi no nível de pod dentro do cluster. Esse recurso oferece controle granular sobre o acesso a recursos cloud e reduz riscos de segurança. Este tópico descreve como usar o recurso RRSA.

Contexto

OIDC (OpenID Connect) é um protocolo de autenticação construído sobre o OAuth 2.0. O Alibaba Cloud RAM oferece suporte a OIDC-based role SSO. As aplicações em um cluster Kubernetes utilizam credenciais temporárias do Security Token service (STS) para acessar apis de recursos cloud. O Alibaba Cloud Container service (ACS) oferece suporte ao RRSA. Em cenários de múltiplos tenants, o RRSA fornece isolamento granular de permissões para acesso a recursos cloud entre pods de aplicação em um cluster. No ACS, o RRSA também permite controlar o período de validade das credenciais temporárias.

image

O RRSA funciona da seguinte forma:

  1. Implante um pod de aplicação que use o recurso de projeção de volume de token de service account.

    Nota

    O recurso de projeção de volume de token de service account está ativado por padrão em clusters ACS.

  2. O cluster cria e monta o arquivo de token OIDC da service account correspondente para o pod da aplicação.

  3. A aplicação no pod usa o arquivo de token OIDC montado para chamar a api AssumeRoleWithOIDC do STS e obter uma credencial temporária para uma função RAM especificada.

    Nota

    Modifique antecipadamente a política de confiança da função RAM para permitir que a service account do pod assuma essa função. Para mais informações, consulte AssumeRoleWithOIDC.

  4. A aplicação no pod usa a credencial temporária obtida para acessar apis de recursos cloud.

Ativar o RRSA

  1. Acesse o console do ACS. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Cluster Information.

  3. Na página de detalhes do cluster, clique na aba Basic Information. Na seção Security and Auditing, clique em Enable ao lado de RRSA OIDC.

  4. Na caixa de diálogo Enable RRSA, clique em OK.

    Nota
    • A ativação do recurso RRSA leva cerca de 2 a 3 minutos. Se o Cluster Status permanecer no estado Updating, clique no botão image no canto superior direito da página para atualizar.

    • Quando o status do cluster mudar de Updating para Running, o recurso RRSA estará ativo no cluster. Passe o cursor sobre Enabled ao lado de RRSA OIDC para ver a URL e o ARN do provedor OIDC.

Após ativar o recurso RRSA em um cluster, o console do ACS executa as seguintes operações em segundo plano:

  • Cria automaticamente um serviço dedicado de OIDC Issuer para o cluster. Esse serviço é gerenciado pelo ACS e não requer manutenção manual.

  • Cria um OIDC identity provider na sua conta usando esse OIDC Issuer. O provedor de identidade OIDC recebe o nome ack-rrsa-<cluster_id>, onde <cluster_id> é o ID do seu cluster.

Usar o RRSA

Após ativar o recurso RRSA, siga estas etapas para permitir que as aplicações no cluster obtenham credenciais temporárias e acessem apis de recursos cloud via RRSA.

Criar e autorizar uma nova função RAM

Nota

Para usar uma função RAM existente em vez de crie uma nova, consulte add the required permissions to the existing RAM role.

A aplicação implantada neste exemplo usa o recurso RRSA para assumir uma função especificada e recuperar uma lista de clusters na conta atual. Os principais recursos utilizados são:

  • Namespace: rrsa-demo.

  • Service account: demo-sa.

  • Função RAM: demo-role-for-rrsa.

  1. Crie uma função RAM chamada demo-role-for-rrsa.

    1. Acesse o console do RAM com sua conta Alibaba Cloud.

    2. No painel de navegação à esquerda, escolha Identities > Roles. Na página Roles, clique em Create Role.

    3. No painel Create Role, clique em Switch to Policy Editor para crie a função.

    4. Na aba Visual Editor, configure as informações da função conforme a tabela a seguir e clique em OK.

      Parâmetro

      Descrição

      Effect

      O valor padrão é Allow.

      Principal

      Selecione Identity Provider e clique em Edit.

      Defina Identity Provider Type como OIDC e selecione o provedor de identidade OIDC do cluster, como ack-rrsa-<cluster_id>. <cluster_id> é o ID do seu cluster.

      Action

      Por padrão, sts:AssumeRole está selecionado.

      Condition

      • oidc:iss: Essa condição é adicionada automaticamente após selecionar Identity Provider. Mantenha a configuração padrão.

      • oidc:aud: Essa condição também é adicionada automaticamente após selecionar Identity Provider. Mantenha a configuração padrão.

      • oidc:sub: Adicione manualmente clicando em Add Condition.

        • Key: oidc:sub

        • Operator: StringEquals

        • Value: O formato é system:serviceaccount:<namespace>:<serviceAccountName>.

          • <namespace>: o namespace onde a aplicação reside.

          • <serviceAccountName>: o nome da service account.

          Com base nas informações da aplicação de teste, insira system:serviceaccount:rrsa-demo:demo-sa.

    5. Na caixa de diálogo exibida, insira o nome da função demo-role-for-rrsa e clique em OK.

  2. Conceda à função criada a política de sistema AliyunCSReadOnlyAccess, necessária para a aplicação de teste. Para mais informações, consulte Manage permissions for a RAM role.

  3. Implante a aplicação de teste.

    1. Crie um arquivo chamado demo.yaml com o seguinte conteúdo.

      Nota

      Substitua os seguintes placeholders no modelo da aplicação de exemplo.

      • <role_arn>: Substitua pelo ARN da função RAM que a aplicação utiliza. Obtenha o ARN no campo ARN na página Basic Information da função no console do RAM.

      • <oidc_provider_arn>: Substitua pelo ARN do provedor OIDC do cluster. Obtenha esse ARN passando o cursor sobre Enabled ao lado de RRSA OIDC na aba Basic Information da página Cluster Information.

      Expand to view the sample code

      ---
      apiVersion: v1
      kind: Namespace
      metadata:
        name: rrsa-demo
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: demo-sa
        namespace: rrsa-demo
      ---
      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: <oidc_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  # Unit: seconds. Valid values: [600, 43200], which means 10 minutes to 12 hours.
                path: token
    2. Execute o seguinte comando para implantar a aplicação de teste.

      kubectl apply -f demo.yaml

      Após a implantação, o application pode usar o token OIDC montado, o ARN da função RAM e o ARN do provedor de identidade OIDC para chamar a api AssumeRoleWithOIDC do STS e obter uma credencial temporária para a função RAM especificada. Em seguida, a aplicação usa essa credencial temporária para acessar apis de recursos cloud. Para mais informações, consulte AssumeRoleWithOIDC.

  4. Execute o seguinte comando para visualize os logs da aplicação de teste.

    kubectl -n rrsa-demo logs demo

    A saída esperada é uma lista de clusters ACK:

    20**/**/** 08:35:23 ======= [begin] list ACK clusters with RRSA =======
    clusters:
    cluster id: cf***, cluster name: foo*
    cluster id: c8***, cluster name: bar*
    cluster id: c4***, cluster name: foob*
    20**/**/** 08:35:24 ======= [end]   list ACK clusters with RRSA =======
  5. Opcional: Desanexe a política de sistema AliyunCSReadOnlyAccess da função. Para mais informações, consulte Remove permissions from a RAM role.

    Aguarde cerca de 30 segundos e execute o seguinte comando para visualize os logs da aplicação novamente:

    kubectl -n rrsa-demo logs demo

    O erro de permissão negada esperado é:

    20**/**/** 10:09:33 ======= [begin] list ACK clusters with RRSA =======
    20**/**/** 10:09:33 SDKError:
       StatusCode: 403
       Code: StatusForbidden
       Message: code: 403, STSToken policy Forbidden for action cs:DescribeClusters request id: XXXX
       Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClusters","AuthPrincipalDisplayName":"demo-role-for-rrsa:ack-ram-tool","AuthPrincipalOwnerId":"XXXX","AuthPrincipalType":"AssumedRoleUser","EncodedDiagnosticMessage":"XXXX","NoPermissionType":"ImplicitDeny","PolicyType":"ResourceGroupLevelIdentityBasedPolicy"},"code":"StatusForbidden","message":"STSToken policy Forbidden for action cs:DescribeClusters","requestId":"XXXX","status":403,"statusCode":403}

Autorizar uma função RAM existente

Se a sua aplicação precisar usar uma função RAM existente em vez de crie uma nova, modifique a política de confiança dessa função adicionando uma instrução que permita às aplicações que usam uma service account específica assumir essa função RAM e obter credenciais temporárias. Para mais informações, consulte Modify the trust policy of a RAM role.

O código a seguir é um exemplo de entrada Statement a ser adicionada à política de confiança da função RAM.

Nota

Substitua os seguintes placeholders na entrada de exemplo Statement.

  • <oidc_issuer_url>: Substitua pela URL do provedor OIDC do cluster. Para obtê-la, passe o cursor sobre Enabled ao lado de RRSA OIDC na aba Basic Information da página Cluster Information.

  • <oidc_provider_arn>: Substitua pelo ARN do provedor OIDC do cluster. Para obtê-lo, passe o cursor sobre Enabled ao lado de RRSA OIDC na aba Basic Information da página Cluster Information.

  • <namespace>: Substitua pelo namespace onde a aplicação reside.

  • <service_account>: Substitua pela service account que a aplicação utiliza.

{
  "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>"
    ]
  }
}

Referências