Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Parte anterior: Dependências e variáveis de ambiente
Imediatamente após as import
instruções, o código de inicialização do aplicativo inicializa as principais variáveis usadas em todas as funções de tratamento de solicitações.
Primeiro, o aplicativo cria o objeto Flask app, que serve como base para definir rotas e lidar com solicitações HTTP recebidas. Em seguida, ele recupera a URL do endpoint da API de terceiros de uma variável de ambiente. Isso permite que o ponto de extremidade seja facilmente configurado sem modificar a base de código:
app = Flask(__name__)
app.config["DEBUG"] = True
number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]
Em seguida, ele obtém o objeto DefaultAzureCredential
, que é a credencial recomendada para usar ao autenticar com os serviços do Azure. Consulte Autenticar aplicações hospedadas no Azure com DefaultAzureCredential.
credential = DefaultAzureCredential()
Quando executado localmente, o DefaultAzureCredential
procura as variáveis de ambiente AZURE_TENANT_ID
, AZURE_CLIENT_ID
e AZURE_CLIENT_SECRET
que contêm informações para o service principal que está a usar para o desenvolvimento local. Quando executado no Azure, DefaultAzureCredential
usa como padrão a identidade gerenciada atribuída pelo sistema habilitada no aplicativo. É possível substituir o comportamento padrão pelas configurações do aplicativo, mas neste cenário de exemplo, usamos o comportamento padrão.
Em seguida, o código recupera a chave de acesso da API de terceiros do Cofre de Chaves do Azure. No script de provisionamento, o Cofre da Chave é criado usando az keyvault create
e o segredo é armazenado com az keyvault secret set
.
O recurso Key Vault em si é acessado por meio de uma URL, que é carregada a partir da variável de ambiente KEY_VAULT_URL
.
key_vault_url = os.environ["KEY_VAULT_URL"]
Para recuperar um segredo do Cofre de Chaves do Azure, o aplicativo deve criar um objeto de cliente que se comunique com o serviço Cofre de Chaves. Como o objetivo é ler um segredo, o aplicativo usa a SecretClient
classe da azure.keyvault.secrets
biblioteca. Este cliente requer duas entradas:
- A URL do Key Vault – normalmente obtida de uma variável de ambiente
- Um objeto de credencial – como a
DefaultAzureCredential
instância criada anteriormente, que representa a identidade sob a qual o aplicativo está sendo executado.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)
A criação de um SecretClient
objeto não autentica imediatamente o aplicativo. O cliente é simplesmente uma construção local que armazena a URL do Cofre da Chave e o objeto de credencial. A autenticação e a autorização acontecem somente quando você invoca uma operação por meio do cliente, como get_secret
, que gera uma chamada de API REST para o recurso do Azure.
api_secret_name = os.environ["THIRD_PARTY_API_SECRET_NAME"]
vault_secret = keyvault_client.get_secret(api_secret_name)
# The "secret" from Key Vault is an object with multiple properties. The key we
# want for the third-party API is in the value property.
access_key = vault_secret.value
Mesmo que a identidade de um aplicativo esteja autorizada a acessar o Cofre de Chaves do Azure, ele também deve ser explicitamente autorizado a executar operações específicas, como ler segredos. Sem essa permissão, uma chamada para get_secret()
falha, mesmo que a identidade seja válida. Para resolver isso, o script de provisionamento define uma política de acesso "obter segredos" para o aplicativo usando o comando da CLI do Azure, az keyvault set-policy
. Para obter mais informações, consulte Autenticação do Cofre da Chave e Conceder ao seu aplicativo acesso ao Cofre da Chave . O último artigo mostra como definir uma política de acesso usando o portal do Azure. (O artigo também foi escrito para identidade gerenciada, mas se aplica igualmente a um princípio de serviço usado no desenvolvimento local.)
Finalmente, o código do aplicativo configura o objeto cliente por meio do qual ele pode gravar mensagens em uma Fila de Armazenamento do Azure. A URL da fila está na variável de ambiente STORAGE_QUEUE_URL
.
queue_url = os.environ["STORAGE_QUEUE_URL"]
queue_client = QueueClient.from_queue_url(queue_url=queue_url, credential=credential)
Assim como no Azure Key Vault, o aplicativo usa um objeto de cliente específico do SDK do Azure para interagir com o Armazenamento de Filas do Azure. Nesse caso, ele usa a QueueClient
classe da biblioteca azure-storage-queue.
Para inicializar o cliente, o aplicativo usa o from_queue_url
método, fornecendo a URL totalmente qualificada da fila e um objeto de credencial. Esse objeto de credencial é novamente a DefaultAzureCredential
instância criada anteriormente, que representa a identidade sob a qual o aplicativo está sendo executado.
Como mencionado anteriormente neste guia, essa autorização é concedida atribuindo a função "Colaborador de Dados da Fila de Armazenamento" à identidade do aplicativo - uma identidade gerenciada no Azure ou um principal de serviço durante o desenvolvimento local.
Essa atribuição de função é feita no script de provisionamento usando o comando az role assignment create
da CLI do Azure.
Supondo que todo o código de inicialização seja bem-sucedido, o aplicativo tem todas as suas variáveis internas para suportar seu /api/v1/getcode endpoint da API.