Autenticación en Azure para entornos de desarrollo y tiempo de ejecución
Para autenticarse en Azure, cree una entidad de servicio que utilice los SDK de Azure para JavaScript.
Autenticación en la plataforma de Azure
Por lo general, para la mayoría de los servicios y funcionalidades, debe autenticarse con un método de credencial de identidad para crear un token. El token se pasa al SDK para autorizar su uso. Hay varios métodos de credencial; algunos requieren una configuración más amplia, pero se han creado para su uso en un servicio de producción.
Busque instrucciones específicas del paquete para autenticarse en cada paquete del SDK de Azure de npm.
Autenticación interactiva para inicios rápidos y tutoriales
Para usar un inicio rápido o un tutorial para los servicios de Azure, el método de credencial más rápido es el inicio de sesión interactivo. Con este método, puede completar algunos pasos rápidos:
- Ejecute el código.
- Se muestra un mensaje con una dirección URL de autenticación y un token.
- Abra un explorador en esa dirección URL y escriba el token. En función de los requisitos de autenticación de Azure, puede ser necesario realizar un segundo paso de autenticación.
- Cuando haya completado la autenticación, puede cerrar el explorador.
- El código continúa su ejecución.
Un ejemplo de autenticación de inicio de sesión interactivo en un explorador requiere la configuración del inquilino y el identificador de cliente para la aplicación de Azure Active Directory en la que se autentica. Un ejemplo de este código es el siguiente:
function withInteractiveBrowserCredential() {
const credential = new InteractiveBrowserCredential({
tenantId: "<YOUR_TENANT_ID>",
clientId: "<YOUR_CLIENT_ID>"
});
const client = new SecretClient("https://key-vault-name.vault.azure.net", credential);
}
Dado que este método requiere un inicio de sesión interactivo cada vez que se ejecuta el código, querrá reemplazar este método por un método de credenciales no interactivo una vez que esté listo para comenzar el trabajo de desarrollo para la plataforma Azure.
Dado que este código no usa ningún secreto de autenticación, puede comprobar este código en el control de código fuente.
Autenticación de Azure para desarrollo y producción
Cuando esté listo para comenzar el trabajo de desarrollo, se recomienda seleccionar las credenciales siguientes:
| Desarrollo local | Aplicación implementada |
|---|---|
| ClientSecretCredential. Después de crear la entidad de servicio y recuperar el identificador de cliente, el identificador de inquilino y el secreto, esta credencial es rápida de usar y no requiere variables de entorno. | Cuando planee realizar la implementación en producción, use DefaultAzureCredential, que requiere variables de entorno. Este método de credenciales proporciona la ventaja de no tener que almacenar ni usar secretos en el control de código fuente. |
Hay otras clases de credenciales, que permiten controlar la autenticación para fines específicos.
1. Creación de una entidad de servicio
Cree una entidad de servicio y configure su acceso a los recursos de Azure. La entidad de servicio es obligatoria para usar DefaultAzureCredential.
Cree la entidad de servicio con el comando az ad sp create-for-rbac de Azure mediante la CLI de Azure o Cloud Shell.
az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME --role ContributorLa respuesta del comando incluye secretos que debe almacenar de forma segura, por ejemplo, en Azure Key Vault:
{ "appId": "YOUR-SERVICE-PRINCIPAL-ID", "displayName": "YOUR-SERVICE-PRINCIPAL-NAME", "name": "http://YOUR-SERVICE-PRINCIPAL-NAME", "password": "!@#$%", "tenant": "YOUR-TENANT-ID" }
También puede crear una entidad de servicio con:
2. Configuración de las variables de entorno
En los entornos en la nube de Azure, debe configurar las siguientes variables de entorno. No cambie los nombres, porque el SDK de Azure Identity requiere estos nombres de entorno exactos. Estas variables de entorno son NECESARIAS para que el contexto use DefaultAzureCredential.
AZURE_TENANT_ID: valor detenantde la salida de la entidad de servicio anterior.AZURE_CLIENT_ID: valor deappIdde la salida de la entidad de servicio anterior.AZURE_CLIENT_SECRET: valor depasswordde la salida de la entidad de servicio anterior.
3. Enumeración de las suscripciones de Azure con una entidad de servicio
Use la nueva entidad de servicio para autenticarse con Azure y enumerar las suscripciones.
Instale las dependencias: Azure SDK para identidades y SDK de suscripciones de Azure.
npm install @azure/identity @azure/arm-subscriptions --saveCree un archivo de JavaScript llamado list.js con el código siguiente:
const { ClientSecretCredential, DefaultAzureCredential } = require("@azure/identity"); const { SubscriptionClient } = require("@azure/arm-subscriptions"); let credentials = null; const tenantId = process.env["AZURE_TENANT_ID"] || "REPLACE-WITH-YOUR-TENANT-ID"; const clientId = process.env["AZURE_CLIENT_ID"] || "REPLACE-WITH-YOUR-CLIENT-ID"; const secret = process.env["AZURE_CLIENT_SECRET"] || "REPLACE-WITH-YOUR-CLIENT-SECRET"; if(process.env.production){ // production credentials = new DefaultAzureCredential(); }else{ // development credentials = new ClientSecretCredential(tenantId, clientId, secret); console.log("development"); } // use credential to authenticate with Azure SDKs let client = new SubscriptionClient(credentials); const subscriptions = async() =>{ // get list of Azure subscriptions const listOfSubscriptions = await client.subscriptions.list(); // get details of each subscription for (const item of listOfSubscriptions) { const subscriptionDetails = await client.subscriptions.get(item.subscriptionId); /* Each item looks like: { id: '/subscriptions/123456', subscriptionId: '123456', displayName: 'YOUR-SUBSCRIPTION-NAME', state: 'Enabled', subscriptionPolicies: { locationPlacementId: 'Internal_2014-09-01', quotaId: 'Internal_2014-09-01', spendingLimit: 'Off' }, authorizationSource: 'RoleBased' }, */ console.log(subscriptionDetails) } } subscriptions() .then(()=>console.log("done")) .catch(ex=>console.log(ex))Si no establece variables de entorno, reemplace las cadenas de credenciales por sus valores.
const tenantId = process.env["AZURE_TENANT_ID"] || "REPLACE-WITH-YOUR-TENANT-ID"; const clientId = process.env["AZURE_CLIENT_ID"] || "REPLACE-WITH-YOUR-CLIENT-ID"; const secret = process.env["AZURE_CLIENT_SECRET"] || "REPLACE-WITH-YOUR-CLIENT-SECRET";Ejecute el archivo para ver la lista de grupos de recursos:
node list.jsVea el código de ejemplo completo y package.json:
Pasos siguientes
- Visualización del historial de operaciones de los recursos
- Creación de una aplicación web con un nombre de dominio seguro
- También puede crear una entidad de servicio con: