Autenticação com o SDK do Azure para Go (legado)
Importante
Este artigo aplica-se à versão herdada do SDK do Azure para Go. Para autenticar nos módulos mais recentes, use o pacote Azure Identity.
O SDK do Azure para Go oferece várias formas de efetuar a autenticação no Azure. Estes tipos de autenticação são invocados através de diferentes métodos de autenticação. Este artigo aborda os tipos e métodos disponíveis, e como escolher os mais indicados para a sua aplicação.
Tipos e métodos de autenticação disponíveis
O Azure SDK para Go oferece vários tipos diferentes de autenticação que utilizam conjuntos de credenciais diferentes. Cada tipo de autenticação está disponível através de diferentes métodos de autenticação, os quais correspondem ao modo como o SDK processa estas credenciais como entradas de dados. A tabela seguinte descreve os tipos de autenticação disponíveis e as situações em que são recomendados para utilização na sua aplicação.
Authentication type | Recomendado quando... |
---|---|
Autenticação baseada em certificado | Você tem um certificado X509 que foi configurado para um usuário do Microsoft Entra ou entidade de serviço. Para saber mais, consulte Introdução à autenticação baseada em certificado na ID do Microsoft Entra. |
Credenciais de cliente | Tem um principal de serviço configurado para esta aplicação ou uma classe de aplicações a que pertence. Para obter mais informações, veja Criar um principal de serviço com a CLI do Azure. |
Identidades geridas para os recursos do Azure | A aplicação está a ser executada num recurso do Azure configurado com uma identidade gerida. Para saber mais, veja Identidades geridas para os recursos do Azure. |
Token de dispositivo | A sua aplicação destina-se a ser utilizada apenas de forma interativa. Os usuários podem ter a autenticação multifator habilitada. Os utilizadores têm acesso a um browser para iniciar sessão. Para obter mais informações, consulte Utilizar a autenticação de token de dispositivo. |
Nome de utilizador/palavra-passe | Tem uma aplicação interativa que não pode utilizar qualquer outro método de autenticação. Seus usuários não têm a autenticação multifator habilitada para a entrada no Microsoft Entra. |
Pontos principais
- Se você usar um tipo de autenticação diferente das credenciais do cliente, seu aplicativo deverá ser registrado no Microsoft Entra ID. Para saber como, consulte Integrando aplicativos com o Microsoft Entra ID.
- A menos que tenha requisitos especiais, evite a autenticação de nome de utilizador/palavra-passe. Em situações em que a entrada baseada no usuário é apropriada, a autenticação de token de dispositivo geralmente pode ser usada.
Estes tipos de autenticação estão disponíveis através de métodos diferentes.
- A autenticação baseada no ambiente lê as credenciais diretamente a partir do ambiente do programa.
- A autenticação baseada em ficheiro carrega um ficheiro que contém as credenciais do principal de serviço.
- A autenticação baseada no cliente utiliza um objeto no código e atribui ao utilizador a responsabilidade de fornecer as credenciais durante a execução do programa.
- A autenticação de token de dispositivo necessita que os utilizadores iniciem sessão de forma interativa através de um browser com um token.
Todas as funções e tipos de autenticação estão disponíveis no pacote github.com/Azure/go-autorest/autorest/azure/auth .
Nota
Exceto se tiver requisitos especiais, evite utilizar a autenticação baseada no cliente. Este método de autenticação encoraja práticas incorretas. Em particular, utilizar a autenticação baseada em cliente convida à criação de credenciais hard-coded. Escrever código personalizado para autenticação também poderá resultar em erros em versões futuras do SDK caso os requisitos de autenticação mudem.
Utilizar a autenticação baseada no ambiente
Se estiver a executar a aplicação num ambiente controlado, a autenticação baseada no ambiente é uma opção natural. Com este método de autenticação, é possível configurar o ambiente da shell antes de executar a aplicação. Em runtime, o SDK para Go lê estas variáveis de ambiente de modo a efetuar a autenticação no Azure.
A autenticação baseada em ambiente tem suporte para todos os tipos de autenticação, exceto tokens de dispositivo, avaliados na seguinte ordem:
- Credenciais de cliente
- Autenticação baseada em certificado
- Nome de utilizador/palavra-passe
- Identidades geridas para os recursos do Azure
Se um determinado tipo de autenticação tiver valores não definidos ou for recusado, o SDK tenta automaticamente o tipo de autenticação seguinte. Quando já não houver mais tipos disponíveis para experimentar, o SDK devolve um erro.
A tabela seguinte fornece detalhes sobre as variáveis de ambiente que têm de ser definidas para cada tipo de autenticação suportado pela autenticação baseada no ambiente.
Authentication type | Variável de ambiente | Description |
---|---|---|
Credenciais de cliente | AZURE_TENANT_ID |
O ID do inquilino do Active Directory a que o principal de serviço pertence. |
AZURE_CLIENT_ID |
O nome ou o ID do principal de serviço. | |
AZURE_CLIENT_SECRET |
O segredo associado ao principal de serviço. | |
Certificado | AZURE_TENANT_ID |
O ID do inquilino do Active Directory com o qual o certificado está registado. |
AZURE_CLIENT_ID |
O ID de cliente de aplicação associado ao certificado. | |
AZURE_CERTIFICATE_PATH |
O caminho para o ficheiro de certificado de cliente. | |
AZURE_CERTIFICATE_PASSWORD |
A palavra-passe do certificado de cliente. | |
Nome de Utilizador/Palavra-passe | AZURE_TENANT_ID |
O ID do inquilino do Active Directory a que o utilizador pertence. |
AZURE_CLIENT_ID |
O ID do cliente de aplicação. | |
AZURE_USERNAME |
O nome de utilizador para início de sessão. | |
AZURE_PASSWORD |
A palavra-passe para início de sessão. | |
Identidade gerida | Não são necessárias credenciais para a autenticação de identidade gerida. A aplicação tem de estar em execução num recurso do Azure configurado para utilizar as identidades geridas. Para mais detalhes, veja Identidades geridas para os recursos do Azure. |
Para ligar a uma cloud ou a um ponto final de gestão sem ser a cloud pública predefinida do Azure, defina as variáveis de ambiente indicadas a seguir. As razões mais comuns são a utilização do Azure Stack, de uma cloud numa região geográfica diferente ou do modelo de implementação clássico.
Variável de ambiente | Description |
---|---|
AZURE_ENVIRONMENT |
O nome do ambiente de cloud para ligação. |
AZURE_AD_RESOURCE |
O ID de recurso do Active Directory a utilizar ao estabelecer ligação, como um URI para o ponto final de gestão. |
Quando utilizar a autenticação baseada no ambiente, chame a função NewAuthorizerFromEnvironment para obter o objeto authorizer. Este objeto é então definido na propriedade Authorizer
dos clientes para permitir o acesso ao Azure.
import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()
Autenticação no Azure Stack
Para autenticar no Azure Stack, tem de definir as seguintes variáveis:
Variável de ambiente | Description |
---|---|
AZURE_AD_ENDPOINT |
O ponto final do Active Directory. |
AZURE_AD_RESOURCE |
O ID de recurso do Active Directory. |
Estas variáveis podem ser obtidas a partir das informações de metadados do Azure Stack. Para obter os metadados, abra um browser web no seu ambiente do Azure Stack e utilize o url: (ResourceManagerURL)/metadata/endpoints?api-version=1.0
O ResourceManagerURL
varia consoante o nome da região, o nome da máquina e o nome do domínio completamente qualificado (FQDN) externo da sua implementação do Azure Stack:
Environment | ResourceManagerURL |
---|---|
Kit de Desenvolvimento | https://management.local.azurestack.external/ |
Sistemas Integrados | https://management.(region).ext-(machine-name).(FQDN) |
Para obter mais informações sobre como utilizar o SDK do Azure para Go no Azure Stack, veja Utilizar perfis de versão de API com o Go no Azure Stack
Utilizar a autenticação baseada em ficheiro
A autenticação baseada em ficheiros utiliza um formato de ficheiro gerado pela CLI do Azure. Pode criar facilmente este ficheiro quando criar um novo principal de serviço com o parâmetro --sdk-auth
. Se pretender utilizar a autenticação baseada em ficheiro, certifique-se de que este argumento é fornecido ao criar um principal de serviço. Uma vez que a CLI imprime a saída de dados stdout
, redirecione-a para um ficheiro.
az ad sp create-for-rbac --role Contributor \
--scopes /subscriptions/<subscription_id> \
--sdk-auth > azure.auth
Defina a variável de ambiente AZURE_AUTH_LOCATION
para onde está localizado o ficheiro de autorização. Esta variável de ambiente é lida pela aplicação e as credenciais que contém são analisadas. Se tiver de selecionar o ficheiro de autorização em runtime, manipule o ambiente do programa utilizando a função os.Setenv.
Para carregar as informações de autenticação, chame a função NewAuthorizerFromFile. Ao contrário da autorização baseada no ambiente, a autorização baseada em ficheiro necessita de um ponto final de recurso.
import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)
Para saber mais sobre a utilização de principais de serviço e a gestão das permissões de acesso, veja Criar um principal de serviço com a CLI do Azure.
Utilizar a autenticação de token de dispositivo
Se pretender que os utilizadores iniciem sessão de forma interativa, a melhor maneira de o fazer é através da autenticação de token de dispositivo. Esse fluxo de autenticação passa ao usuário um token para colar em um site de entrada da Microsoft, onde ele se autentica com uma conta do Microsoft Entra. Este método de autenticação suporta contas que têm a autenticação multifator ativada, ao contrário da autenticação padrão de nome de utilizador/palavra-passe.
Para utilizar a autenticação de token de dispositivo, crie um objeto authorizer DeviceFlowConfig com a função NewDeviceFlowConfig. Chame Authorizer no objeto resultante para iniciar o processo de autenticação. Os blocos de autenticação do fluxo do dispositivo programam a execução até todo o fluxo de autenticação ser concluído.
import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()
Utilizar um cliente de autenticação
Se necessitar de um tipo de autenticação específico e quiser que o seu programa execute o carregamento das informações de autenticação do utilizador, pode utilizar qualquer cliente que esteja em conformidade com a interface auth.AuthorizerConfig. Utilize um tipo que implemente esta interface quando:
- Escrever um programa interativo
- Utilizar ficheiros de configuração especializados
- Tiver um requisito que o impede de utilizar um método de autenticação incorporado
Aviso
Nunca utilize credenciais do Azure hard-coded numa aplicação. Colocar segredos no binário de uma aplicação torna mais fácil para um atacante extrai-las, quer a aplicação esteja a ser executada ou não. Tal coloca em risco todos os recursos do Azure para os quais as credenciais estão autorizadas!
A tabela seguinte lista os tipos no SDK que estão em conformidade com a interface AuthorizerConfig
.
Authentication type | Tipo de authorizer |
---|---|
Autenticação baseada em certificado | ClientCertificateConfig |
Credenciais de cliente | ClientCredentialsConfig |
Identidades geridas para os recursos do Azure | MSIConfig |
Nome de utilizador/palavra-passe | UsernamePasswordConfig |
Crie um autenticador com a função New
associada e, em seguida, chame Authorize
no objeto resultante para efetuar a autenticação. Por exemplo, para utilizar a autenticação baseada em certificado:
import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()