Todos os produtos
Search
Central de documentação

Container Compute Service:Configure pod-level permissions with RRSA

Última atualização: Jun 29, 2026

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

Contexto

OIDC (OpenID Connect) é um protocolo de autenticação baseado no OAuth 2.0. O Alibaba Cloud RAM oferece suporte ao SSO de função baseado em OIDC. As aplicações em um cluster Kubernetes usam credenciais temporárias do Security Token Service (STS) para acessar APIs de recursos de nuvem. O Alibaba Cloud Container Service (ACS) oferece suporte ao RRSA. Em cenários multilocatário, o RRSA proporciona isolamento granular de permissões para acesso a recursos de nuvem entre pods de aplicação no cluster. No ACS, o RRSA também permite controlar o período de validade das credenciais temporárias.

O RRSA funciona da seguinte maneira:

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

    Nota

    O recurso de projeção de volume de token de conta de serviço vem ativado por padrão em clusters ACS.

  2. O cluster cria e monta o arquivo de token OIDC da conta de serviço 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 específica.

    Nota

    Modifique previamente a política de confiança da função RAM para permitir que a conta de serviço 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 as APIs de recursos de nuvem.

Ativar o RRSA

  1. Faça login no 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 RRSA leva cerca de 2 a 3 minutos. Caso o Cluster Status permaneça 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 RRSA estará ativado para o cluster. Passe o mouse sobre Enabled ao lado de RRSA OIDC para visualizar a URL e o ARN do provedor OIDC.

Após ativar o RRSA para 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. O ACS gerencia esse serviço, sem necessidade de manutenção manual.

  • Cria um provedor de identidade OIDC na sua conta que utiliza esse OIDC Issuer. O nome do provedor de identidade OIDC é ack-rrsa-<cluster_id>, onde <cluster_id> corresponde ao ID do seu cluster.

Usar o RRSA

Depois de ativar o RRSA, siga estas etapas para permitir que as aplicações no cluster obtenham credenciais temporárias para acessar APIs de recursos de nuvem por meio do RRSA.

Criar e autorizar uma nova função RAM

Nota

Para usar uma função RAM existente em vez de criar uma nova, adicione as permissões necessárias à função RAM existente.

A aplicação implantada neste exemplo usa o 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.

  • Conta de serviço: demo-sa.

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

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

    1. Faça login no console do RAM usando 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 criar uma função.

    4. Na aba Visual Editor, configure as informações da função conforme descrito na 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 o tipo de provedor de identidade 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: Esta condição é adicionada automaticamente após a seleção do Identity Provider. Use a configuração padrão.

      • oidc:aud: Esta condição é adicionada automaticamente após a seleção do Identity Provider. Use a configuração padrão.

      • oidc:sub: Adicione manualmente a condição 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 conta de serviço.

          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 Gerenciar permissões para uma função RAM.

  3. Implante a aplicação de teste.

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

      Nota

      Substitua os seguintes espaços reservados no modelo de aplicação de exemplo.

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

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

      Expandir para visualizar o código de exemplo

      ---
      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 comando a seguir para implantar a aplicação de teste.

      kubectl apply -f demo.yaml

      Após a implantação, a aplicação 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 utiliza essa credencial temporária para acessar as APIs de recursos de nuvem. Para mais informações, consulte AssumeRoleWithOIDC.

  4. Execute o comando a seguir para visualizar 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: Remova a política de sistema AliyunCSReadOnlyAccess da função. Para mais informações, consulte Remover permissões de uma função RAM.

    Aguarde cerca de 30 segundos e execute o comando a seguir para visualizar os logs da aplicação novamente:

    kubectl -n rrsa-demo logs demo

    Espera-se um erro de permissão negada:

    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

Caso sua aplicação precise usar uma função RAM existente em vez de uma nova, modifique a política de confiança da função RAM adicionando uma instrução que permita que aplicações usando uma conta de serviço específica assumam essa função RAM e obtenham credenciais temporárias. Para mais informações, consulte Modificar a política de confiança de uma função RAM.

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

Nota

Substitua os seguintes espaços reservados no exemplo de entrada Statement.

  • <oidc_issuer_url>: Substitua pela URL do provedor OIDC do cluster. Para obter a URL, passe o mouse 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 obter o ARN, passe o mouse 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 conta de serviço 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