Compartilhar via


Implantar e configurar a federação de identidade de carga de trabalho no Kubernetes habilitado para Azure Arc (versão prévia)

Habilite o recurso de identidade de carga de trabalho em um cluster do Kubernetes habilitado para Azure Arc usando a CLI do Azure. O processo segue estas etapas de alto nível:

  1. Habilite o recurso de identidade de carga de trabalho em um cluster do Kubernetes novo ou existente habilitado para Arc.
  2. Crie uma identidade gerenciada (ou registro de aplicativo) e uma conta de serviço do Kubernetes.
  3. Configurar a identidade gerenciada para federação de token.
  4. Configure anotações de conta de serviço e rótulos de pod de aplicativo para usar a identidade da carga de trabalho.
  5. Defina as configurações de identidade da carga de trabalho no cluster do Kubernetes.
  6. Desabilite a identidade da carga de trabalho no cluster.

Para obter uma visão geral desse recurso, consulte a Federação de identidade de carga de trabalho no Kubernetes habilitado para Azure Arc (versão prévia).

Importante

O recurso de federação de identidade de carga de trabalho do Azure Arc está atualmente em VERSÃO PRÉVIA. Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.

Dica

Este artigo descreve as etapas necessárias para implantar e configurar a identidade da carga de trabalho em um cluster Kubernetes habilitado para Arc. Para saber como habilitar a identidade da carga de trabalho em outros tipos de clusters, consulte os seguintes artigos:

Pré-requisitos

  • A identidade da carga de trabalho para clusters do Kubernetes habilitados para Azure Arc (versão prévia) tem suporte nas seguintes distribuições do Kubernetes:
    • Cluster do Ubuntu Linux executando K3s
    • AKS no Edge Essentials
    • AKS no HCI 23H2

Para usar o recurso de identidade de carga de trabalho, você deve ter a CLI do Azure versão 2.64 ou superior e az connectedk8s a versão 1.10.0 ou superior. Atualize sua versão da CLI do Azure antes de atualizar sua versão az connectedk8s. Caso use o Azure Cloud Shell, a versão mais recente da CLI do Azure será instalada.

Habilitar a identidade da carga de trabalho em seu cluster

Siga as etapas apropriadas para habilitar o recurso de identidade de carga de trabalho para um novo cluster do Kubernetes habilitado para Arc ou um existente. Em ambos os casos, substitua o nome e o grupo de recursos por seus valores e configure os parâmetros conforme desejado.

Parâmetro Descrição Obrigatório
--enable-oidc-issuer Gera e hospeda o URL do emissor OIDC, que é um URL acessível publicamente que permite que o servidor de API encontre chaves de assinatura pública para verificar tokens.  Obrigatório
--enable-workload-identity Instala um webhook de admissão mutáveis que projeta um token de conta de serviço assinado em um caminho conhecido e injeta variáveis de ambiente relacionadas à autenticação nos pods de aplicativo com base nas configurações da conta de serviço anotada. Para um novo cluster, se esse parâmetro não estiver habilitado, você deverá montar um volume projetado em um caminho conhecido que exponha o token de conta de serviço assinado ao caminho. Opcional

Definir variáveis de ambiente

Para conveniência, as variáveis de ambiente definidas abaixo são referenciadas nos exemplos deste artigo. Substitua esses valores por seus próprios valores:

export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"

Para criar um cluster habilitado para Azure Arc com a identidade da carga de trabalho habilitada, use o seguinte comando:

az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity

Para habilitar a identidade da carga de trabalho em um cluster do Kubernetes habilitado para Arc existente, use o comando update.

az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity

Recuperar a URL do emissor do OIDC

Busque o URL do emissor do OIDC e salve-o em uma variável ambiental. Este URL do emissor será usado na próxima etapa.

export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \ 
    --query "oidcIssuerProfile.issuerUrl" \  
    --output tsv)"

Para exibir a variável de ambiente, insira echo ${OIDC_ISSUER}. A variável de ambiente deve conter a URL do emissor, semelhante ao seguinte exemplo:

https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/

Por padrão, o emissor é definido para usar o URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid} base, em que o valor para {region} corresponde ao local onde o cluster do Kubernetes habilitado para Arc é criado. O valor {uuid} representa a chave OIDC (OpenID Connect), que é um GUID imutável gerado aleatoriamente para cada cluster.

Criar uma identidade gerenciada

Utilize o comando az identity create para criar uma identidade gerida atribuída pelo utilizador. Com a identidade da carga de trabalho, uma relação de confiança é estabelecida entre o token da identidade de gerenciamento atribuída pelo usuário e o token de conta de serviço do cluster do Kubernetes.

az identity create \ 
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --subscription "${SUBSCRIPTION}"

Busque a ID do cliente da identidade gerenciada e armazene em uma variável de ambiente.

export USER_ASSIGNED_CLIENT_ID="$(az identity show \ 
    --resource-group "${RESOURCE_GROUP}" \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --query 'clientId' \
    --output tsv)"

Criar uma conta de serviço do Kubernetes

Crie uma conta de serviço do Kubernetes e anote-a com a ID do cliente da identidade gerenciada criada na etapa anterior. Os tokens assinados associados à conta de serviço do Kubernetes serão trocados por um token do Microsoft Entra ID depois que a relação de confiança for estabelecida entre os dois.

Aplique o snippet YAML a seguir para criar uma conta de serviço com anotação de identidade de carga de trabalho adicionada.

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  annotations: 
    azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}" 
  name: "${SERVICE_ACCOUNT_NAME}" 
  namespace: "${SERVICE_ACCOUNT_NAMESPACE}" 

Criar a credencial de identidade federada

Use o az identity federated-credential create comando para criar a credencial de identidade federada entre a identidade gerenciada, o emissor da conta de serviço e o assunto. Esta etapa estabelece a relação de confiança entre o cluster do Kubernetes e o Microsoft Entra para troca de tokens. Para obter mais informações sobre credenciais de identidade federadas no Microsoft Entra, consulte Visão geral das credenciais de identidade federadas no Microsoft Entra ID.

az identity federated-credential create \ 
    --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \ 
    --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ 
    --resource-group "${RESOURCE_GROUP}" \ 
    --issuer "${OIDC_ISSUER}" \ 
    --subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \ 
    --audience api://AzureADTokenExchange 

Observação

Depois que a credencial de identidade federal é adicionada, leva alguns segundos para ser propagada. Se uma solicitação de token for feita imediatamente após a adição da credencial de identidade federada, a solicitação poderá falhar até que o cache seja atualizado. Para evitar esse problema, adicione um pequeno atraso nos scripts depois de adicionar a credencial de identidade federada.

Configurar anotações de conta de serviço e rótulos de pod

As anotações de pod e conta de serviço a seguir estão disponíveis para configurar a identidade da carga de trabalho com base nos requisitos do aplicativo. O rótulo de pod especificado abaixo é obrigatório se –-enable-workload-identity for definido como true.

Anotações de conta de serviço

Todas as anotações da conta de serviço são opcionais. Se uma anotação não for especificada, o valor padrão será utilizado.

Anotação Descrição Padrão
azure.workload.identity/client-id ID do cliente do aplicativo Microsoft Entra a ser usada com o pod.
azure.workload.identity/tenant-id ID do locatário do Azure em que o aplicativo Microsoft Entra está registrado. AZURE_TENANT_ID variável de ambiente extraída de azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration Campo expirationSeconds para o token de conta de serviço projetada. Configure para evitar o tempo de inatividade causado por erros durante a atualização do token da conta de serviço. A expiração do token de conta de serviço do Kubernetes não está correlacionada com tokens do Microsoft Entra. Os tokens do Microsoft Entra expiram em 24 horas após serem emitidos. 3600 (intervalo com suporte é de 3600 a 86400)

Rótulos do pod

Anotação Descrição Valor recomendado Obrigatório
azure.workload.identity/use Necessário na especificação do modelo de pod. Se –-enable-workload-identity estiver definido como true, somente os pods com esse rótulo serão modificados pelo webhook de admissão mutáveis para injetar as variáveis de ambiente específicas do Azure e o volume de token de conta de serviço projetado. true Sim

Anotações de pod

Todas as anotações de pod são opcionais. Se uma anotação não for especificada, o valor padrão será utilizado.

Anotação Descrição Padrão
azure.workload.identity/service-account-token-expiration Campo expirationSeconds para o token de conta de serviço projetada. Configure para evitar o tempo de inatividade causado por erros durante a atualização do token da conta de serviço. A expiração do token de conta de serviço do Kubernetes não está correlacionada com tokens do Microsoft Entra. Os tokens do Microsoft Entra expiram em 24 horas após serem emitidos. 3600 (intervalo com suporte é de 3600 a 86400)
azure.workload.identity/skip-containers Representa uma lista de contêineres separados por ponto e vírgula para ignorar a adição do volume de token de conta de serviço projetado. Por exemplo: container1;container2. Por padrão, o volume projetado do token de conta de serviço será adicionado a todos os contêineres se o pod estiver rotulado com azure.workload.identity/use: true.

Definir configurações de identidade de carga de trabalho no cluster do Kubernetes

O servidor de API no cluster do Kubernetes precisa ser configurado para emitir tokens de conta de serviço que incluem o URL do emissor OIDC acessível publicamente (para que o Entra saiba onde encontrar as chaves públicas para validar o token).

Para definir as configurações de identidade de carga de trabalho no Ubuntu Linux com K3s, siga as etapas abaixo para concluir a configuração:

  1. Criar arquivo de configuração k3s.

  2. Edite /etc/rancher/k3s/config.yaml para adicionar estas configurações:

       `kube-apiserver-arg:  
         - 'service-account-issuer=${OIDC_ISSUER}'
         - 'service-account-max-token-expiration=24h'`
    
  3. Salve o config.yaml.

  4. Reinicie o servidor de API k3s usando o comando systemctl restart k3s.

    Recomendamos girar as chaves da conta de serviço com frequência. Para obter mais informações, consulte Rotação de chave do emissor da conta de serviço.

Desabilitar a identidade da carga de trabalho

Para desabilitar o recurso de identidade de carga de trabalho em um cluster do Kubernetes habilitado para Azure Arc, execute o seguinte comando:

az connectedk8s update
    --resource-group "${RESOURCE_GROUP}"
    --name "${CLUSTER_NAME}"
    --disable-workload-identity

Próximas etapas