Integrazione di Express con le autorizzazioni verificate di Amazon - Autorizzazioni verificate da Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Integrazione di Express con le autorizzazioni verificate di Amazon

L'integrazione Verified Permissions Express fornisce un approccio basato sul middleware per l'implementazione dell'autorizzazione nelle applicazioni Express.js. Con questa integrazione, puoi proteggere gli endpoint delle API utilizzando politiche di autorizzazione granulari senza modificare i gestori di route esistenti. L'integrazione gestisce automaticamente i controlli di autorizzazione intercettando le richieste, valutandole rispetto alle policy definite e garantendo che solo gli utenti autorizzati possano accedere alle risorse protette.

Questo argomento illustra la configurazione dell'integrazione Express, dalla creazione di un archivio di politiche all'implementazione e al test del middleware di autorizzazione. Seguendo questi passaggi, è possibile aggiungere solidi controlli di autorizzazione all'applicazione Express con modifiche minime al codice.

In questo argomento GitHub si fa riferimento ai seguenti repository:

Prerequisiti

Prima di implementare l'integrazione con Express, assicurati di avere:

Configurazione dell'integrazione

Fase 1: Creare un archivio delle politiche

Creare un archivio delle politiche utilizzando AWS CLI:

aws verifiedpermissions create-policy-store --validation-settings "mode=STRICT"
Nota

Salva l'ID dell'archivio delle politiche restituito nella risposta per utilizzarlo nei passaggi successivi.

Fase 2: Installare le dipendenze

Installa i pacchetti richiesti nella tua applicazione Express:

npm i --save @verifiedpermissions/authorization-clients-js npm i --save @cedar-policy/authorization-for-expressjs

Configurazione dell'autorizzazione

Passaggio 1: generare e caricare lo schema Cedar

Uno schema definisce il modello di autorizzazione per un'applicazione, inclusi i tipi di entità nell'applicazione e le azioni che gli utenti possono intraprendere. Si consiglia di definire uno spazio dei nomi per lo schema. In questo esempio viene utilizzato YourNamespace. Alleghi lo schema agli archivi dei criteri di autorizzazione verificata e, quando i criteri vengono aggiunti o modificati, il servizio li convalida automaticamente rispetto allo schema.

Il @cedar-policy/authorization-for-expressjs pacchetto può analizzare le specifiche OpenAPI dell'applicazione e generare uno schema Cedar. In particolare, l'oggetto paths è richiesto nelle vostre specifiche.

Se non disponi di una specifica OpenAPI, puoi seguire le istruzioni rapide del express-openapi-generatorpacchetto per generare una specifica OpenAPI.

Genera uno schema dalla tua specifica OpenAPI:

npx @cedar-policy/authorization-for-expressjs generate-schema --api-spec schemas/openapi.json --namespace YourNamespace --mapping-type SimpleRest

Quindi, formatta lo schema Cedar da utilizzare con. AWS CLI Per ulteriori informazioni sul formato specifico richiesto, vedereSchema di archiviazione delle politiche di Amazon Verified Permissions. Se hai bisogno di aiuto per formattare lo schema, c'è uno script chiamato prepare-cedar-schema.sh nel repository GitHubverifiedpermissions/examples. Di seguito è riportato un esempio di chiamata a quello script che restituisce lo schema formattato Verified Permissions nel file. v2.cedarschema.forAVP.json

./scripts/prepare-cedar-schema.sh v2.cedarschema.json v2.cedarschema.forAVP.json

Carica lo schema formattato nel tuo policy store, sostituendolo policy-store-id con il tuo ID del policy store:

aws verifiedpermissions put-schema \ --definition file://v2.cedarschema.forAVP.json \ --policy-store-id policy-store-id

Fase 2: Creare politiche di autorizzazione

Se non è configurata alcuna politica, Cedar nega tutte le richieste di autorizzazione. L'integrazione del framework Express aiuta ad avviare questo processo generando politiche di esempio basate sullo schema generato in precedenza.

Quando si utilizza questa integrazione nelle applicazioni di produzione, si consiglia di creare nuove politiche utilizzando gli strumenti Infrastructure as a code (IaaC). Per ulteriori informazioni, consulta Creazione di risorse Amazon Verified Permissions con AWS CloudFormation.

Genera esempi di policy Cedar:

npx @cedar-policy/authorization-for-expressjs generate-policies --schema v2.cedarschema.json

Questo genererà politiche di esempio nella /policies directory. È quindi possibile personalizzare queste politiche in base ai casi d'uso. Per esempio:

// Defines permitted administrator user group actions permit ( principal in YourNamespace::UserGroup::"<userPoolId>|administrator", action, resource ); // Defines permitted employee user group actions permit ( principal in YourNamespace::UserGroup::"<userPoolId>|employee", action in [YourNamespace::Action::"GET /resources", YourNamespace::Action::"POST /resources", YourNamespace::Action::"GET /resources/{resourceId}", YourNamespace::Action::"PUT /resources/{resourceId}"], resource );

Formatta le politiche da utilizzare con AWS CLI. Per ulteriori informazioni sul formato richiesto, consulta create-policy nel AWS CLI riferimento. Se hai bisogno di aiuto per formattare le politiche, c'è uno script chiamato convert_cedar_policies.sh nel repository verifiedpermissions/examples. GitHub Quella che segue è una chiamata a quello script:

./scripts/convert_cedar_policies.sh

Carica le politiche formattate in Autorizzazioni verificate, sostituendole policy_1.json con il percorso e il nome del file delle politiche e policy-store-id con l'ID del tuo archivio delle politiche:

aws verifiedpermissions create-policy \ --definition file://policies/json/policy_1.json \ --policy-store-id policy-store-id

Fase 3: Connect a un provider di identità

Per impostazione predefinita, il middleware Verified Permissions Authorizer legge un JSON Web Token (JWT) fornito nell'intestazione di autorizzazione della richiesta API per ottenere informazioni sull'utente. Le autorizzazioni verificate possono convalidare il token oltre a eseguire la valutazione della politica di autorizzazione.

Crea un file di configurazione dell'origine dell'identità denominato identity-source-configuration.txt come segue con il tuo userPoolArn e: clientId

{ "cognitoUserPoolConfiguration": { "userPoolArn": "arn:aws:cognito-idp:region:account:userpool/pool-id", "clientIds": ["client-id"], "groupConfiguration": { "groupEntityType": "YourNamespace::UserGroup" } } }

Crea l'origine dell'identità eseguendo il AWS CLI comando seguente, sostituendolo policy-store-id con il tuo Policy Store ID:

aws verifiedpermissions create-identity-source \ --configuration file://identity-source-configuration.txt \ --policy-store-id policy-store-id \ --principal-entity-type YourNamespace::User

Implementazione del middleware di autorizzazione

Aggiorna l'applicazione Express per includere il middleware di autorizzazione. In questo esempio utilizziamo token di identità, ma puoi anche utilizzare token di accesso. Per ulteriori informazioni, vedere authorization-for-expressjssu. GitHub

const { ExpressAuthorizationMiddleware } = require('@cedar-policy/authorization-for-expressjs'); const { AVPAuthorizationEngine } = require('@verifiedpermissions/authorization-clients'); const avpAuthorizationEngine = new AVPAuthorizationEngine({ policyStoreId: 'policy-store-id', callType: 'identityToken' }); const expressAuthorization = new ExpressAuthorizationMiddleware({ schema: { type: 'jsonString', schema: fs.readFileSync(path.join(__dirname, '../v4.cedarschema.json'), 'utf8'), }, authorizationEngine: avpAuthorizationEngine, principalConfiguration: { type: 'identityToken' }, skippedEndpoints: [], logger: { debug: (s) => console.log(s), log: (s) => console.log(s), } }); // Add the middleware to your Express application app.use(expressAuthorization.middleware);

Test dell'integrazione

Puoi testare l'implementazione dell'autorizzazione effettuando richieste agli endpoint API con diversi token utente. Il middleware di autorizzazione valuterà automaticamente ogni richiesta rispetto alle politiche definite.

Ad esempio, se hai impostato diversi gruppi di utenti con autorizzazioni diverse:

  • Amministratori: accesso completo a tutte le risorse e le funzioni di gestione

  • Dipendenti: possono visualizzare, creare e aggiornare le risorse

  • Clienti: possono solo visualizzare le risorse

È possibile verificare che le politiche di autorizzazione funzionino come previsto accedendo con utenti diversi e tentando varie operazioni. Nel terminale dell'applicazione Express, è possibile visualizzare l'output del registro che fornisce ulteriori dettagli sulle decisioni di autorizzazione.

Risoluzione dei problemi

In caso di errori di autorizzazione, prova quanto segue:
  • Verifica che il tuo Policy Store ID sia corretto

  • Assicurati che la tua fonte di identità sia configurata correttamente

  • Verifica che le tue politiche siano formattate correttamente

  • Verifica che i tuoi token JWT siano validi

Passaggi successivi

Dopo aver implementato l'integrazione di base, considera:

  • Implementazione di mappatori personalizzati per scenari di autorizzazione specifici

  • Configurazione del monitoraggio e della registrazione per le decisioni di autorizzazione

  • Creazione di politiche aggiuntive per diversi ruoli utente