Compartilhar via


Configurar um aplicativo para confiar em um provedor de identidade externo

Este artigo descreve como gerenciar uma credencial de identidade federada em um aplicativo na ID do Microsoft Entra. A credencial de identidade federada cria uma relação de confiança entre um aplicativo e um IdP (provedor de identidade externo).

Em seguida, você pode configurar uma carga de trabalho de software externo para trocar um token do IdP externo por um token de acesso da plataforma de identidade da Microsoft. A carga de trabalho externa pode acessar recursos protegidos do Microsoft Entra sem a necessidade de gerenciar segredos (em cenários com suporte). Para saber mais sobre o fluxo de trabalho de troca de token, leia sobre Federação de identidade de carga de trabalho.

Neste artigo, você aprenderá a criar, listar e excluir credenciais de identidade federadas em um aplicativo na ID do Microsoft Entra.

Considerações e restrições importantes

Para criar, atualizar ou excluir uma credencial de identidade federada, a conta que executa a ação deve ter a função administrador de aplicativos , do Desenvolvedor de Aplicativos, de Administrador de Aplicativos na Nuvem ou Proprietário do Aplicativo. A permissão microsoft.directory/applications/credentials/update é necessária para atualizar uma credencial de identidade federada.

Um máximo de 20 credenciais de identidade federadas podem ser adicionadas a um aplicativo ou identidade gerenciada atribuída pelo usuário.

Quando você configura uma credencial de identidade federada, há várias informações importantes a serem fornecidas:

  • O issuer e o subject são as principais informações necessárias para configurar a relação de confiança. A combinação de issuer e subject deve ser exclusiva no aplicativo. Quando a carga de trabalho de software externo solicita à plataforma de identidade da Microsoft a troca do token externo por um token de acesso, os valores de emissor e de sujeito da credencial de identidade federada são verificados em relação às reivindicações issuer e subject fornecidas no token externo. Se essa verificação de validação for aprovada, a plataforma de identidade da Microsoft emitirá um token de acesso para a carga de trabalho de software externo.

  • O issuer é a URL do provedor de identidade externa e deve corresponder à declaração issuer do token externo que está sendo trocado. Obrigatório Se a declaração issuer tiver espaço em branco à esquerda ou à direita no valor, a troca de tokens será bloqueada. Esse campo tem um limite de caracteres de 600 caracteres.

  • O subject é o identificador da carga de trabalho de software externo e deve corresponder à declaração sub (subject) do token externo que está sendo trocado. assunto não tem formato fixo, pois cada IdP usa o seu próprio - às vezes um GUID, às vezes um identificador delimitado por dois pontos, às vezes sequências de caracteres aleatórias. Esse campo tem um limite de caracteres de 600 caracteres.

    Importante

    Os valores de configuração do sujeito e devem corresponder exatamente à configuração no fluxo de trabalho do GitHub. Caso contrário, a plataforma de identidade da Microsoft examinará o token externo de entrada e rejeitará a troca por um token de acesso. Você não receberá um erro, a troca falhará sem erros.

    Importante

    Se você adicionar acidentalmente as informações incorretas de carga de trabalho externa na configuração subject, a credencial de identidade federada será criada com êxito sem erros. O erro não se torna aparente até que a troca de tokens falhe.

  • audiences lista os públicos que podem aparecer no token externo. Obrigatório. Você deve adicionar um único valor de audiência, que tem um limite de 600 caracteres. O valor recomendado é "api://AzureADTokenExchange". Ele informa o que a plataforma de identidade da Microsoft deve aceitar na declaração aud no token de entrada.

  • nome é o identificador exclusivo da credencial de identidade federada. Obrigatórios. Esse campo tem um limite de caracteres de 3 a 120 caracteres e deve ser amigável à URL. Há suporte para caracteres alfanuméricos, traços ou sublinhados, o primeiro caractere deverá ser apenas alfanumérico. É imutável uma vez criado.

  • descrição é a descrição fornecida pelo usuário da credencial de identidade federada. Opcional. A descrição não é validada ou verificada pela ID do Microsoft Entra. Esse campo tem um limite de 600 caracteres.

Não há suporte para caracteres curinga em valor da propriedade de credencial de identidade federada.

Para saber mais sobre regiões com suporte, tempo para propagar atualizações de credenciais federadas, emissores com suporte e muito mais, leia Considerações e restrições importantes para credenciais de identidade federadas.

Pré-requisitos

  • Criar um registro de aplicativo ou de identidade gerenciada no Microsoft Entra ID. Conceda ao seu aplicativo acesso aos recursos do Azure direcionados pela carga de trabalho do software externo.
  • Localize a ID do objeto do aplicativo (não a ID do aplicativo (cliente), que você precisa nas etapas a seguir. Você pode encontrar a ID do objeto do aplicativo no centro de administração do Microsoft Entra. Vá para a lista de registros de aplicativo e selecione o registro do aplicativo. Em Visão geral, você pode encontrar a ID do objeto.
  • Obtenha as informações de entidade e emissor para o IdP e a carga de trabalho do software externo, que você precisará nas etapas a seguir.

Configurar uma credencial de identidade federada em um aplicativo

Ações do GitHub

Para adicionar uma identidade federada para ações do GitHub, siga estas etapas:

  1. Encontre o registro do aplicativo na experiência de registros de aplicativo do centro de administração do Microsoft Entra. Selecione Certificados e segredos no painel de navegação esquerdo, selecione a guia Credenciais federadas e selecione Adicionar credencial.

  2. Na caixa suspensa Cenário de credencial federada, selecione GitHub Actions implantando recursos do Azure.

  3. Especifique a Organização e o Repositório para o fluxo de trabalho do GitHub Actions.

  4. Para Tipo de entidade, selecione Ambiente, Ramificação, Solicitação de pull ou Marca e especifique o valor. Os valores devem corresponder exatamente à configuração no fluxo de trabalho do GitHub . Não há suporte para padrões correspondentes para ramificações e marcas. Especifique um ambiente se o fluxo de trabalho no push for executado em várias ramificações ou marcas. Para obter mais informações, leia os exemplos .

  5. Adicione um nome para a credencial federada.

  6. Os campos Emissor, Audiênciase Identificador do Assunto são preenchidos automaticamente com base nos valores inseridos.

  7. Selecione Adicionar para configurar a credencial federada.

    Captura de tela da janela Adicionar uma credencial, mostrando valores de exemplo.

Use os seguintes valores do registro do aplicativo Microsoft Entra para o fluxo de trabalho do GitHub:

  • AZURE_CLIENT_ID a ID (cliente) do aplicativo

  • AZURE_TENANT_ID a ID do diretório (locatário)

    A captura de tela a seguir demonstra como copiar a ID do aplicativo e a ID do locatário.

    Captura de tela que demonstra como copiar a ID do aplicativo e a ID do locatário do Centro de administração do Microsoft Entra.

  • AZURE_SUBSCRIPTION_ID sua ID de assinatura. Para obter a ID da assinatura, abra Assinaturas no portal do Azure e localize sua assinatura. Então, copie a ID da assinatura.

Exemplos de tipo de entidade

Exemplo de ramo

Para um fluxo de trabalho disparado por um evento de solicitação por push ou de pull na ramificação principal:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

Especifique um Tipo de entidade igual a Branch e um nome do branch do GitHub igual a "principal".

Exemplo de ambiente

Para trabalhos vinculados a um ambiente chamado "produção":

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

Especifique um Tipo de entidade igual a Ambiente e um Nome do ambiente do GitHub igual a "produção".

Exemplo de etiqueta

Por exemplo, para um fluxo de trabalho disparado por um push para a tag chamada "v2":

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:
      - v2
      - v1.*

Especifique um Tipo de entidade igual a Marca e um Nome da marca do GitHub igual a "v2".

Exemplo de solicitação de pull

Para um fluxo de trabalho disparado por um evento de solicitação de pull, especifique um Tipo de entidade da Solicitação de pull

Kubernetes

Encontre o registro do aplicativo na experiência de registros de aplicativo do centro de administração do Microsoft Entra. Selecione Certificados & segredos no painel de navegação à esquerda, selecione a guia Credenciais federadas e selecione Adicionar credencial.

Selecione o cenário de recursos do Azure acessando Kubernetes no menu suspenso.

Preencha os campos: URL do emissor do cluster , Namespace , nome da conta de serviço e Nome .

  • A URL do emissor do cluster é a URL do emissor do OIDC para o cluster gerenciado ou a URL do Emissor do OIDC para um cluster auto-gerenciado.
  • O nome da conta de serviço é o nome da conta de serviço do Kubernetes, que define uma identidade para os processos executados em um Pod.
  • Namespace é o namespace da conta de serviço.
  • Name é o nome da credencial federada, que não pode ser alterada posteriormente.

Outros provedores de identidade

Encontre o registro do aplicativo na experiência de registros de aplicativo do centro de administração do Microsoft Entra. Selecione Certificados e segredos no painel de navegação esquerdo, selecione a guia Credenciais federadas e selecione Adicionar credencial.

Selecione o cenário Outro emissor no menu suspenso.

Especifique os seguintes campos (usando uma carga de trabalho de software em execução no Google Cloud como exemplo):

  • Name é o nome da credencial federada, que não pode ser alterada posteriormente.
  • Identificador de assunto: deve corresponder à declaração sub no token emitido pelo provedor de identidade externo. Neste exemplo, usando o Google Cloud, assunto é a ID Exclusiva da conta de serviço que você planeja usar.
  • Emissor: deve corresponder à declaração iss no token emitido pelo provedor de identidade externo. Uma URL que está em conformidade com a especificação de descoberta OIDC. O Microsoft Entra ID usa essa URL do emissor para buscar as chaves necessárias para validar o token. Para o Google Cloud, o emissor é "https://accounts.google.com;.

Listar credenciais de identidade federadas em um aplicativo

Encontre o registro do aplicativo na experiência de registros de aplicativo do centro de administração do Microsoft Entra. Selecione Segredos e certificados no painel de navegação à esquerda e selecione a guia Credenciais federadas. As credenciais federadas configuradas em seu aplicativo são listadas.

Excluir uma credencial de identidade federada de um aplicativo

Encontre o registro do aplicativo na experiência de registros de aplicativo do centro de administração do Microsoft Entra. Selecione Segredos e certificados no painel de navegação à esquerda e selecione a guia Credenciais federadas. As credenciais federadas configuradas em seu aplicativo são listadas.

Para excluir uma credencial de identidade federada, selecione o ícone Excluir da credencial.

Configurar uma credencial de identidade federada flexível (versão prévia)

  1. Navegue até a ID do Microsoft Entra e selecione o aplicativo no qual você deseja configurar a credencial de identidade federada.
  2. No painel de navegação esquerdo, selecione Certificados e segredos.
  3. Na guia de credenciais federadas, selecione + Adicionar credencial.
  4. Na janela exibida Adicionar uma credencial, no menu suspenso ao lado de Cenário de credencial federada, selecione Outro emissor.
  5. Em Valor insira a expressão de correspondência de declaração que você deseja usar.

Pré-requisitos

  • Criar um registro de aplicativo no Microsoft Entra ID. Conceda ao seu aplicativo acesso aos recursos do Azure direcionados pela carga de trabalho do software externo.
  • Localize a ID do objeto, a ID do aplicativo (cliente) ou o URI do identificador do aplicativo, que você precisa nas etapas a seguir. Você pode encontrar esses valores no centro de administração do Microsoft Entra. Vá para a lista de aplicativos registrados e selecione o registro do aplicativo. Em Visão Geral->Essentials, obtenha a ID do Objeto, a ID do Aplicativo (cliente) ou o valor do URI da ID do Aplicativo, que você precisa nas etapas a seguir.
  • Obtenha as informações de entidade e emissor para o IdP e a carga de trabalho do software externo, que você precisará nas etapas a seguir.

Configurar uma credencial de identidade federada em um aplicativo

Execute o comando az ad app federated-credential create para criar uma credencial de identidade federada em seu aplicativo.

O parâmetro id especifica o URI do identificador, a ID do aplicativo ou a ID do objeto do aplicativo. O parâmetro parameters especifica os parâmetros, no formato JSON, para criar a credencial de identidade federada.

Exemplo do GitHub Actions

O nome especifica o nome da credencial de identidade federada.

O parâmetro issuer identifica o caminho para o provedor OIDC do GitHub: https://token.actions.githubusercontent.com/. Esse emissor se torna confiável pelo aplicativo do Azure.

O assunto identifica a organização, o repositório e o ambiente do GitHub para o fluxo de trabalho do GitHub Actions. Quando o fluxo de trabalho do GitHub Actions solicita à plataforma de identidade da Microsoft para trocar um token do GitHub por um token de acesso, os valores na credencial de identidade federada são verificados em relação ao token do GitHub fornecido. Antes que o Azure conceda um token de acesso, a solicitação deve corresponder às condições definidas aqui.

  • Para trabalhos vinculados a um ambiente: repo:< Organization/Repository >:environment:< Name >
  • Para trabalhos não vinculados a um ambiente, inclua o caminho de referência para ramificação/marca com base no caminho de referência usado para disparar o fluxo de trabalho: repo:< Organization/Repository >:ref:< ref path>. Por exemplo, repo:n-username/ node_express:ref:refs/heads/my-branch ou repo:n-username/ node_express:ref:refs/tags/my-tag.
  • Para fluxos de trabalho disparados por um evento de pull request: repo:< Organization/Repository >:pull-request.
az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Testing",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:octo-org/octo-repo:environment:Production",
    "description": "Testing",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Exemplo do Kubernetes

O emissor é a URL do emissor da conta de serviço (a URL do emissor do OIDC para o cluster gerenciado ou a URL do Emissor do OIDC para um cluster autogerenciado).

O assunto é o nome da entidade nos tokens emitidos para a conta de serviço. O Kubernetes usa o seguinte formato para nomes de assunto: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.

O nome é o nome da credencial federada, que não pode ser alterada posteriormente.

O público lista os públicos que podem aparecer no token externo. Esse campo é obrigatório. O valor recomendado é api://AzureADTokenExchange.

az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Kubernetes-federated-credential",
    "issuer": "https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
    "subject": "system:serviceaccount:erp8asle:pod-identity-sa",
    "description": "Kubernetes service account federated credential",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Exemplo de outros provedores de identidade

Você pode configurar uma credencial de identidade federada em um aplicativo e criar uma relação de confiança com outros provedores de identidade externos. O exemplo a seguir usa uma carga de trabalho de software em execução no Google Cloud como exemplo:

  • name é o nome da credencial federada, que não pode ser alterada posteriormente.
  • id: a ID do objeto, a ID do aplicativo (cliente) ou o URI do identificador do aplicativo.
  • subject: deve corresponder à declaração sub no token emitido pelo provedor de identidade externo. Neste exemplo, usando o Google Cloud, assunto é a ID Exclusiva da conta de serviço que você planeja usar.
  • issuer: deve corresponder à declaração iss no token emitido pelo provedor de identidade externo. Uma URL que está em conformidade com a especificação OIDC Discovery. O Microsoft Entra ID usa essa URL do emissor para buscar as chaves necessárias para validar o token. Para o Google Cloud, o emissor é "https://accounts.google.com;.
  • audiences: lista os públicos que podem aparecer no token externo. Esse campo é obrigatório. O valor recomendado é "api://AzureADTokenExchange".
az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "GcpFederation",
    "issuer": "https://accounts.google.com",
    "subject": "112633961854638529490",
    "description": "Test GCP federation",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Listar credenciais de identidade federadas em um aplicativo

Execute o comando az ad app federated-credential list para listar as credenciais de identidade federadas em seu aplicativo.

O parâmetro id especifica o URI do identificador, a ID do aplicativo ou a ID do objeto do aplicativo.

az ad app federated-credential list --id 00001111-aaaa-2222-bbbb-3333cccc4444

Obter uma credencial de identidade federada em um aplicativo

Execute o comando az ad app federated-credential show para obter uma credencial de identidade federada em seu aplicativo.

O parâmetro id especifica o URI do identificador, a ID do aplicativo ou a ID do objeto do aplicativo.

O federated-credential-id especifica a ID ou o nome da credencial de identidade federada.

az ad app federated-credential show --id 00001111-aaaa-2222-bbbb-3333cccc4444 --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

Excluir uma credencial de identidade federada de um aplicativo

Execute o comando az ad app federated-credential delete para remover uma credencial de identidade federada do seu aplicativo.

O parâmetro id especifica o URI do identificador, a ID do aplicativo ou a ID do objeto do aplicativo.

O federated-credential-id especifica a ID ou o nome da credencial de identidade federada.

az ad app federated-credential delete --id 00001111-aaaa-2222-bbbb-3333cccc4444 --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

Pré-requisitos

  • Para executar os scripts de exemplo, você tem duas opções:
    • Use o Azure Cloud Shell, que você pode abrir usando o botão Experimentar no canto superior direito dos blocos de código.
    • Execute scripts localmente com o Azure PowerShell, conforme descrito na próxima seção.
  • Criar um registro de aplicativo no Microsoft Entra ID. Conceda ao seu aplicativo acesso aos recursos do Azure direcionados pela carga de trabalho do software externo.
  • Localize a ID do objeto do aplicativo (não a ID do aplicativo (cliente), que você precisa nas etapas a seguir. Você pode encontrar a ID do objeto do aplicativo no centro de administração do Microsoft Entra. Vá para a lista de aplicativos registrados e selecione o registro do aplicativo. Em Visão Geral->Essentials, localize a ID do objeto .
  • Obtenha as informações de entidade e emissor para o IdP e a carga de trabalho do software externo, que você precisará nas etapas a seguir.

Configurar o Azure PowerShell localmente

Para usar o Azure PowerShell localmente para este artigo em vez de usar o Cloud Shell:

  1. Instale a versão mais recente do Azure PowerShell se ainda não tiver feito isso.

  2. Entre no Azure.

    Connect-AzAccount
    
  3. Instale a versão mais recente do PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Talvez seja necessário sair da sessão do PowerShell atual após executar o comando Exit, antes de seguir para a próxima etapa.

  4. Instale a versão de pré-lançamento do módulo Az.Resources para executar as operações de credencial de identidade federadas neste artigo.

    Install-Module -Name Az.Resources -AllowPrerelease
    

Configurar uma credencial de identidade federada em um aplicativo

Execute o cmdlet New-AzADAppFederatedCredential para criar uma nova credencial de identidade federada em um aplicativo.

Exemplo do GitHub Actions

  • ApplicationObjectId: a ID do objeto do aplicativo (não a ID do aplicativo (cliente) que você registrou anteriormente na ID do Microsoft Entra.
  • Emissor identifica o GitHub como o emissor do token externo.
  • Assunto identifica a organização, o repositório e o ambiente do GitHub para o workflow do GitHub Actions. Quando o fluxo de trabalho do GitHub Actions solicita à plataforma de identidade da Microsoft para trocar um token do GitHub por um token de acesso, os valores na credencial de identidade federada são verificados em relação ao token do GitHub fornecido.
    • Para trabalhos vinculados a um ambiente: repo:< Organization/Repository >:environment:< Name >
    • Para trabalhos não vinculados a um ambiente, inclua o caminho de referência para ramificação/marca com base no caminho de referência usado para disparar o fluxo de trabalho: repo:< Organization/Repository >:ref:< ref path>. Por exemplo, repo:n-username/ node_express:ref:refs/heads/my-branch ou repo:n-username/ node_express:ref:refs/tags/my-tag.
    • Para fluxos de trabalho disparados por um evento de pull request: repo:< Organization/Repository >:pull-request.
  • Name é o nome da credencial federada, que não pode ser alterada posteriormente.
  • Audience lista os públicos que podem aparecer no token externo. Esse campo é obrigatório. O valor recomendado é api://AzureADTokenExchange.
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://token.actions.githubusercontent.com/' -Name 'GitHub-Actions-Test' -Subject 'repo:octo-org/octo-repo:environment:Production'

Exemplo do Kubernetes

  • ApplicationObjectId: a ID do objeto do aplicativo (não a ID do aplicativo (cliente) que você registrou anteriormente na ID do Microsoft Entra.
  • Issuer é a URL do emissor da conta de serviço (a URL do emissor do OIDC para o cluster gerenciado ou a URL do Emissor do OIDC para um cluster autogerenciado).
  • Subject é o nome da entidade nos tokens emitidos para a conta de serviço. O Kubernetes usa o seguinte formato para nomes de assunto: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.
  • Name é o nome da credencial federada, que não pode ser alterada posteriormente.
  • Audience lista os públicos que podem aparecer na declaração aud do token externo.
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

Exemplo de outros provedores de identidade

Especifique os seguintes parâmetros (usando uma carga de trabalho de software em execução no Google Cloud como exemplo):

  • ObjectID: a ID do objeto do aplicativo (não a ID do aplicativo (cliente) que você registrou anteriormente no Microsoft Entra ID).
  • Name é o nome da credencial federada, que não pode ser alterada posteriormente.
  • Subject: deve corresponder à declaração sub no token emitido pelo provedor de identidade externo. Neste exemplo, usando o Google Cloud, assunto é a ID Exclusiva da conta de serviço que você planeja usar.
  • Emissor: deve corresponder à declaração iss no token emitido pelo provedor de identidade externo. Uma URL que está em conformidade com a especificação de Descoberta do OIDC. O Microsoft Entra ID usa essa URL do emissor para localizar as chaves necessárias para validar o token. Para o Google Cloud, o emissor é "https://accounts.google.com;.
  • Audiences: deve corresponder à declaração aud no token externo. Por motivos de segurança, você deve escolher um valor exclusivo para tokens destinados à ID do Microsoft Entra. O valor recomendado é "api://AzureADTokenExchange".
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://accounts.google.com' -Name 'GcpFederation' -Subject '112633961854638529490'

Listar credenciais de identidade federadas em um aplicativo

Execute o cmdlet Get-AzADAppFederatedCredential para listar as credenciais de identidade federadas de um aplicativo.

Get-AzADApplication -ObjectId $app | Get-AzADAppFederatedCredential

Obter uma credencial de identidade federada em um aplicativo

Execute o cmdlet Get-AzADAppFederatedCredential para obter a credencial de identidade federada por ID de um aplicativo.

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

Excluir uma credencial de identidade federada de um aplicativo

Execute o cmdlet Remove-AzADAppFederatedCredential para excluir uma credencial de identidade federada de um aplicativo.

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

Pré-requisitos

Criar um registro de aplicativo no Microsoft Entra ID. Conceda ao seu aplicativo acesso aos recursos do Azure que são alvos da sua carga de trabalho de software externa.

Localize a ID do objeto do aplicativo (não a ID do aplicativo (cliente), que você precisa nas etapas a seguir. Você pode encontrar a ID do objeto do aplicativo no centro de administração do Microsoft Entra. Vá para a lista de aplicativos registrados e selecione o registro do aplicativo. Em Visão geral->Essentials, localize a ID do objeto.

Obtenha as informações de entidade e emissor para o IdP e a carga de trabalho do software externo, que você precisará nas etapas a seguir.

O ponto de extremidade do Microsoft Graph (https://graph.microsoft.com) expõe as APIs REST para criar, atualizar e excluir federatedIdentityCredentials em aplicativos. Inicie o Azure Cloud Shell e faça login no seu locatário para executar comandos do Microsoft Graph no AZ CLI.

Configurar uma credencial de identidade federada em um aplicativo

Ações do GitHub

Execute o método a seguir para criar uma nova credencial de identidade federada em seu aplicativo (especificado pela ID do objeto do aplicativo). O issuer identifica o GitHub como o emissor do token externo. subject identifica a organização, o repositório e o ambiente do GitHub para o fluxo de trabalho do GitHub Actions. Quando o fluxo de trabalho do GitHub Actions solicita à plataforma de identidade da Microsoft para trocar um token do GitHub por um token de acesso, os valores na credencial de identidade federada são verificados em relação ao token do GitHub fornecido.

az rest --method POST --uri 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials' --body '{"name":"Testing","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

E você obtém a resposta:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
  "issuer": "https://token.actions.githubusercontent.com",
  "name": "Testing",
  "subject": "repo:octo-org/octo-repo:environment:Production"
}

No snippet de código, os parâmetros são os seguintes:

  • name: o nome do aplicativo do Azure.
  • issuer: O caminho para o provedor OIDC do GitHub: https://token.actions.githubusercontent.com. Esse emissor se torna confiável pelo aplicativo do Azure.
  • subject: antes que o Azure conceda um token de acesso, a solicitação deve corresponder às condições definidas aqui.
    • Para trabalhos vinculados a um ambiente: repo:< Organization/Repository >:environment:< Name >
    • Para trabalhos não vinculados a um ambiente, inclua o caminho de referência para ramificação/marca com base no caminho de referência usado para disparar o fluxo de trabalho: repo:< Organization/Repository >:ref:< ref path>. Por exemplo, repo:n-username/ node_express:ref:refs/heads/my-branch ou repo:n-username/ node_express:ref:refs/tags/my-tag.
    • Para fluxos de trabalho disparados por um evento de pull request: repo:< Organization/Repository >:pull-request
  • audiences lista os públicos que podem aparecer no token externo. Esse campo é obrigatório. O valor recomendado é "api://AzureADTokenExchange".

Exemplo do Kubernetes

Execute o método a seguir para configurar uma credencial de identidade federada em um aplicativo e criar uma relação de confiança com uma conta de serviço do Kubernetes. Especifique os seguintes parâmetros:

  • issuer é a URL do emissor da conta de serviço (a URL do emissor OIDC para o cluster gerenciado ou a URL do emissor OIDC para um cluster autogerenciado).
  • subject é o nome da entidade nos tokens emitidos para a conta de serviço. O Kubernetes usa o seguinte formato para nomes de assunto: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.
  • name é o nome da credencial federada, que não pode ser alterada posteriormente.
  • audiences lista os públicos que podem aparecer no token externo. Esse campo é obrigatório. O valor recomendado é "api://AzureADTokenExchange".
az rest --method POST --uri 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials' --body '{"name":"Kubernetes-federated-credential","issuer":"https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/","subject":"system:serviceaccount:erp8asle:pod-identity-sa","description":"Kubernetes service account federated credential","audiences":["api://AzureADTokenExchange"]}'

E você obtém a resposta:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Kubernetes service account federated credential",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
  "name": "Kubernetes-federated-credential",
  "subject": "system:serviceaccount:erp8asle:pod-identity-sa"
}

Exemplo de outros provedores de identidade

Execute o método a seguir para configurar uma credencial de identidade federada em um aplicativo e criar uma relação de confiança com um provedor de identidade externo. Especifique os seguintes parâmetros (usando uma carga de trabalho de software em execução no Google Cloud como exemplo):

  • nome é o nome da credencial federada, que não pode ser alterada posteriormente.
  • ObjectID: a ID do objeto do aplicativo (não a ID do aplicativo (cliente)) que você registrou anteriormente no Microsoft Entra ID.
  • subject: deve corresponder à declaração sub no token emitido pelo provedor de identidade externo. Neste exemplo, usando o Google Cloud, assunto é a ID Exclusiva da conta de serviço que você planeja usar.
  • emissor: deve corresponder à declaração iss no token emitido pelo provedor de identidade externo. Uma URL que está em conformidade com a especificação de descoberta OIDC. O Microsoft Entra ID usa essa URL do emissor para obter as chaves necessárias para a validação do token. No caso do Google Cloud, o issuer é "https://accounts.google.com".
  • audiences lista os públicos que podem aparecer no token externo. Esse campo é obrigatório. O valor recomendado é "api://AzureADTokenExchange".
az rest --method POST --uri 'https://graph.microsoft.com/applications/<ObjectID>/federatedIdentityCredentials' --body '{"name":"GcpFederation","issuer":"https://accounts.google.com","subject":"112633961854638529490","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

E você obtém a resposta:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://accounts.google.com"",
  "name": "GcpFederation",
  "subject": "112633961854638529490"
}

Listar credenciais de identidade federadas em um aplicativo

Execute o método a seguir para listar as credenciais de identidade federadas para um aplicativo (especificado pela ID do objeto do aplicativo):

az rest -m GET -u 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials'

E você obtém uma resposta semelhante a:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials",
  "value": [
    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
  ]
}

Obter uma credencial de identidade federada em um aplicativo

Execute o método a seguir para obter uma credencial de identidade federada para um aplicativo (especificado pela ID do objeto do aplicativo):

az rest -m GET -u 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444//federatedIdentityCredentials/00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

E você obtém uma resposta semelhante a:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials",
  "value": {
      "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
      "@odata.id": "https://graph.microsoft.com/v2/3d1e2be9-a10a-4a0c-8380-7ce190f98ed9/directoryObjects/$/Microsoft.DirectoryServices.Application('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials('00001111-aaaa-2222-bbbb-3333cccc4444')/00001111-aaaa-2222-bbbb-3333cccc4444",
    "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
}

Excluir uma credencial de identidade federada de um aplicativo

Execute o método a seguir para excluir uma credencial de identidade federada de um aplicativo (especificado pela ID do objeto do aplicativo):

az rest -m DELETE  -u 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials/00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

Consulte também

  • Para aprender a usar a federação de identidade de carga de trabalho do Kubernetes, confira o projeto de software livre ID de carga de trabalho do Microsoft Entra no Kubernetes.
  • Para saber como usar a federação de identidade de carga de trabalho para o GitHub Actions, consulte Configurar um fluxo de trabalho do GitHub Actions para obter um token de acesso.
  • Leia a documentação do GitHub Actions para saber mais sobre como configurar o fluxo de trabalho do GitHub Actions para obter um token de acesso do provedor de identidade da Microsoft e acessar os recursos do Azure.
  • Para obter mais informações, leia sobre como o Microsoft Entra ID usa a concessão de credenciais do cliente OAuth 2.0 e uma asserção de cliente emitida por outro IdP para obter um token.
  • Para obter informações sobre o formato exigido dos JWTs criados por provedores de identidade externos, leia sobre o formato de asserção .