Exercício - Autorize sua entidade de serviço para implantações

Concluído

No exercício anterior, você criou uma entidade de serviço para o pipeline de implantação do seu site e testou que poderia entrar usando sua chave. Agora você está pronto para conceder à entidade de serviço acesso ao seu ambiente do Azure. Neste exercício, você criará uma atribuição de função para a entidade de serviço e, em seguida, implantará um arquivo Bicep usando a entidade de serviço.

Durante o processo, você:

  • Inicie sessão como a sua própria conta de utilizador.
  • Crie um grupo de recursos para o site da sua empresa.
  • Crie uma atribuição de função para permitir que a entidade de serviço implante recursos no grupo de recursos.
  • Entre como a entidade de serviço e implante o arquivo Bicep que cria os recursos do site da sua empresa.
  • Verifique a implantação.
  • Limpe o grupo de recursos e a entidade de serviço.

Iniciar sessão como conta de utilizador

No exercício anterior, você entrou usando a entidade de serviço e, em seguida, saiu. Você precisa entrar como sua própria conta de usuário novamente para que possa acompanhar as próximas etapas deste exercício.

  1. No terminal do Azure Cloud Shell (bash) do Visual Studio Code, entre no Azure executando o seguinte comando:

    az login
    
  2. No browser que se abre, inicie sessão na sua conta do Azure.

  1. No terminal do Azure Cloud Shell (PowerShell) do Visual Studio Code, entre no Azure executando o seguinte comando:

    Connect-AzAccount
    
  2. No browser que se abre, inicie sessão na sua conta do Azure.

Criar um grupo de recursos

Agora você criará um grupo de recursos para conter os recursos do site da empresa de brinquedos.

  1. Execute este comando da CLI do Azure no terminal do Visual Studio Code para criar um grupo de recursos:

    az group create --name ToyWebsite --location eastus
    
  2. Observe a saída JSON do comando anterior. Ele inclui uma propriedade chamada id, que é a ID do grupo de recursos. Copie isso em algum lugar seguro. Você vai usá-lo em breve.

  1. Execute este comando do Azure PowerShell no terminal do Visual Studio Code para criar um grupo de recursos:

    New-AzResourceGroup -Name ToyWebsite -Location eastus
    
  2. Observe a saída do comando anterior. Ele inclui uma propriedade chamada ResourceId, que é a ID do grupo de recursos. Copie isso em algum lugar seguro. Você vai usá-lo em breve.

Criar uma atribuição de função

Para o pipeline de implantação do seu site, você decide criar uma atribuição de função com os seguintes detalhes:

  • Cessionário: A entidade de serviço que você criou no exercício anterior.
  • Função: A função interna do Colaborador.
  • Escopo: o grupo de recursos que você criou na etapa anterior.

Execute o seguinte comando da CLI do Azure no terminal do Visual Studio Code para criar a atribuição de função. Substitua os espaços reservados pelos valores copiados anteriormente.

az role assignment create \
  --assignee APPLICATION_ID \
  --role Contributor \
  --scope RESOURCE_GROUP_ID \
  --description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."

Execute o seguinte comando da CLI do Azure no terminal do Visual Studio Code para criar a atribuição de função. Substitua os espaços reservados pelos valores copiados anteriormente.

New-AzRoleAssignment `
  -ApplicationId APPLICATION_ID `
  -RoleDefinitionName Contributor `
  -Scope RESOURCE_GROUP_ID `
  -Description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."

Criar um arquivo Bicep

Você criou anteriormente um arquivo Bicep que implanta os recursos do seu site. Aqui, você salva esse arquivo para que possa testá-lo usando a entidade de serviço.

  1. Crie um novo arquivo chamado main.bicep.

  2. Adicione o seguinte conteúdo ao arquivo main.bicep . Você implantará o modelo em breve.

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The name of the App Service app.')
    param appServiceAppName string = 'toywebsite${uniqueString(resourceGroup().id)}'
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string = 'F1'
    
    var appServicePlanName = 'toy-website-plan'
    var applicationInsightsInstanceName = 'toy-website-insights'
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2020-06-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource applicationInsightsInstance 'Microsoft.Insights/components@2018-05-01-preview' = {
      name: applicationInsightsInstanceName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsightsInstance.properties.InstrumentationKey
            }
            {
              name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
              value: applicationInsightsInstance.properties.ConnectionString
            }
          ]
        }
      }
    }
    
  3. Guarde as alterações ao ficheiro. Você pode selecionar Arquivo>Salvar como ou Ctrl+S no Windows (⌘+S no macOS). Lembre-se de onde você salvou o arquivo. Por exemplo, talvez você queira criar uma pasta de scripts para salvá-la.

Implantar o arquivo Bicep usando a entidade de serviço

No momento, você não tem um pipeline de implantação, então simulará o que um pipeline faz para implantar seu arquivo Bicep.

  1. Execute o seguinte comando da CLI do Azure no terminal do Visual Studio Code para entrar usando as credenciais da entidade de serviço. Substitua os espaços reservados pelos valores copiados no exercício anterior.

    az login --service-principal \
      --username APPLICATION_ID \
      --password SERVICE_PRINCIPAL_KEY \
      --tenant TENANT_ID
    
  2. Implante o arquivo Bicep executando o seguinte comando da CLI do Azure:

    az deployment group create \
      --resource-group ToyWebsite \
      --template-file main.bicep
    

    A implantação pode levar um ou dois minutos para ser concluída e, em seguida, você verá uma implantação bem-sucedida.

  1. Execute o seguinte comando do Azure PowerShell no terminal do Visual Studio Code para solicitar com segurança as credenciais da entidade de serviço. Use o ID do aplicativo e a chave da entidade de serviço do exercício anterior para o nome de usuário e a senha, respectivamente.

    $credential = Get-Credential
    
  2. Execute o seguinte comando do Azure PowerShell no terminal do Visual Studio Code para entrar usando as credenciais da entidade de serviço. Substitua o espaço reservado TENANT_ID pelo valor copiado anteriormente.

    Connect-AzAccount -ServicePrincipal `
      -Credential $credential `
      -Tenant TENANT_ID
    
  3. Implante o arquivo Bicep executando o seguinte comando do Azure PowerShell:

    New-AzResourceGroupDeployment -ResourceGroupName ToyWebsite -TemplateFile main.bicep
    

    A implantação pode levar um ou dois minutos para ser concluída e, em seguida, você verá uma implantação bem-sucedida.

Verificar a implementação

Use o portal do Azure para inspecionar os recursos que você implantou e para inspecionar os resultados da implantação.

  1. Aceda ao portal do Azure.

  2. No painel esquerdo, selecione Grupos de recursos.

  3. Selecione ToyWebsite.

  4. Selecione Implantações para ver a implantação bem-sucedida.

    Screenshot of the Azure portal resource group Deployments pane, displaying the successful deployment.

    Você também pode ver uma implantação chamada Failure-Anomalies-Alert-Rule-Deployment. O Application Insights cria essa implantação automaticamente.

  5. Selecione a implantação principal para ver quais recursos foram implantados e expanda Detalhes da implantação.

    Nesse caso, o plano do Serviço de Aplicativo, o aplicativo e a instância do Application Insights são listados.

    Screenshot of the Azure portal deployments overview pane for the main deployment, with an App Service plan and app, and an Application Insights instance listed.

    Observe que não há nada de incomum nessa implantação. Mesmo que uma entidade de serviço o tenha iniciado, é como qualquer outra implantação do Bicep.

Limpar o grupo de recursos e a entidade de serviço

Você criou com êxito uma entidade de serviço e uma atribuição de função e implantou os recursos do seu site usando um arquivo Bicep. Agora você pode remover os recursos que criou.

  1. Saia da conta da entidade de serviço usando o seguinte comando:

    az logout
    
  2. Entre novamente no Azure com sua própria conta de usuário executando o seguinte comando:

    az login
    
  3. No browser que se abre, inicie sessão na sua conta do Azure.

  4. Execute o seguinte comando da CLI do Azure para excluir o grupo de recursos, seu conteúdo e a atribuição de função:

    az group delete --name ToyWebsite
    

    Quando lhe for pedido para confirmar, introduza y.

  5. Execute o seguinte comando para excluir a entidade de serviço. Substitua o espaço reservado APPLICATION_ID pelo ID do aplicativo copiado no exercício anterior:

    az ad sp delete --id APPLICATION_ID
    
  1. Saia da conta da entidade de serviço usando o seguinte comando:

    Logout-AzAccount
    
  2. Entre novamente no Azure com sua própria conta de usuário executando o seguinte comando:

    Connect-AzAccount
    
  3. No browser que se abre, inicie sessão na sua conta do Azure.

  4. Execute o seguinte comando do Azure PowerShell para excluir o grupo de recursos, seu conteúdo e a atribuição de função:

    Remove-AzResourceGroup -Name ToyWebsite
    

    Quando lhe for pedido para confirmar, introduza y.

  5. Execute o seguinte comando para excluir a entidade de serviço. Substitua o espaço reservado APPLICATION_ID pelo ID do aplicativo copiado no exercício anterior:

    Remove-AzADServicePrincipal -ApplicationId APPLICATION_ID
    

    Quando lhe for pedido para confirmar, introduza y.