Creazione di IAM policy personalizzate per accedere ai dati in Amazon Neptune - Amazon Neptune

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à.

Creazione di IAM policy personalizzate per accedere ai dati in Amazon Neptune

Le dichiarazioni di policy di accesso ai dati di Neptune utilizzano azioni di accesso ai dati, risorse e chiavi di condizione, tutte precedute dal prefisso neptune-db:.

Utilizzo delle azioni di query nelle dichiarazioni di policy di accesso ai dati di Neptune

Esistono tre azioni di query di Neptune che possono essere utilizzate nelle dichiarazioni di policy di accesso ai dati, vale a dire ReadDataViaQuery, WriteDataViaQuery e DeleteDataViaQuery. Una particolare query può richiedere le autorizzazioni per eseguire più di una di queste azioni e potrebbe non essere sempre ovvio quale combinazione di queste azioni debba essere consentita per eseguire una query.

Prima di eseguire una query, Neptune determina le autorizzazioni necessarie per eseguire ogni passaggio della query e le combina nel set completo di autorizzazioni richieste dalla query. Nota che questo set completo di autorizzazioni include tutte le azioni che la query potrebbe eseguire, il che non è necessariamente il set di azioni che la query effettivamente eseguirà quando verrà eseguita sui dati.

Ciò significa che per consentire l'esecuzione di una determinata query, è necessario fornire le autorizzazioni per ogni azione che la query potrebbe eseguire, indipendentemente dal fatto che le esegua effettivamente o meno.

Ecco alcuni esempi di query Gremlin in cui ciò viene spiegato più dettagliatamente:

  • g.V().count()

    g.V() e count() richiedono solo l'accesso in lettura, quindi la query nel suo complesso richiede solo l'accesso ReadDataViaQuery.

  • g.addV()

    addV() deve verificare se esiste o meno un vertice con un determinato ID prima di inserirne uno nuovo. Ciò significa che richiede sia l'accesso ReadDataViaQuery che WriteDataViaQuery.

  • g.V('1').as('a').out('created').addE('createdBy').to('a')

    g.V('1').as('a') e out('created') richiedono solo l'accesso in lettura, ma addE().from('a') richiede sia l'accesso in lettura che in scrittura perché addE() deve leggere i vertici from e to e verificare se esiste già un arco con lo stesso ID prima di aggiungerne uno nuovo. La query nel suo complesso necessita quindi sia dell'accesso ReadDataViaQuery che WriteDataViaQuery.

  • g.V().drop()

    g.V() richiede solo l'accesso in lettura. drop() necessita sia dell'accesso in lettura che di quello di eliminazione perché deve leggere un vertice o uno arco prima di eliminarlo, quindi la query nel suo complesso richiede sia l'accesso ReadDataViaQuery che DeleteDataViaQuery.

  • g.V('1').property(single, 'key1', 'value1')

    g.V('1') richiede solo l'accesso in lettura, ma property(single, 'key1', 'value1') richiede l'accesso in lettura, scrittura ed eliminazione. In questo caso, il passaggio property() inserisce la chiave e il valore se non esistono già nel vertice, ma se esistono già, elimina il valore della proprietà esistente e inserisce un nuovo valore al suo posto. Pertanto, la query nel suo complesso richiede l'accesso ReadDataViaQuery, WriteDataViaQuery e DeleteDataViaQuery.

    Qualsiasi query che contenga un passaggio property() avrà bisogno delle autorizzazioni ReadDataViaQuery, WriteDataViaQuery e DeleteDataViaQuery.

Ecco alcuni esempi: openCypher

  • MATCH (n) RETURN n

    Questa query legge tutti i nodi del database e li restituisce, il che richiede solo l'accesso ReadDataViaQuery.

  • MATCH (n:Person) SET n.dept = 'AWS'

    Questa query richiede l'accesso ReadDataViaQuery, WriteDataViaQuery e DeleteDataViaQuery. Legge tutti i nodi con l'etichetta 'Person' e vi aggiunge una nuova proprietà con la chiave dept e il valore AWS oppure, se la proprietà dept esiste già, elimina il vecchio valore e inserisce AWS al suo posto. Inoltre, se il valore da impostare è null, SET elimina completamente la proprietà.

    Poiché in alcuni casi può essere necessario eliminare un valore esistente, la clausola SET necessita sempre delle autorizzazioni DeleteDataViaQuery nonché delle autorizzazioni ReadDataViaQuery e WriteDataViaQuery.

  • MATCH (n:Person) DETACH DELETE n

    Questa query richiede le autorizzazioni ReadDataViaQuery e DeleteDataViaQuery. Trova tutti i nodi con l'etichetta Person e li elimina insieme agli archi collegati a tali nodi e alle etichette e proprietà associate.

  • MERGE (n:Person {name: 'John'})-[:knows]->(:Person {name: 'Peter'}) RETURN n

    Questa query richiede le autorizzazioni ReadDataViaQuery e WriteDataViaQuery. La clausola MERGE cerca la corrispondenza con un modello specificato o lo crea. Poiché può verificarsi un'operazione di scrittura se non viene trovata una corrispondenza con il modello, sono necessarie le autorizzazioni di scrittura oltre a quelle di lettura.