Amazon Neptune のデータにアクセスするためのカスタム IAM ポリシーステートメントの作成 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Neptune のデータにアクセスするためのカスタム IAM ポリシーステートメントの作成

Neptune データアクセスポリシーステートメントは、データアクセスアクションリソース、および条件キーを使用し、これらはすべて neptune-db: プレフィックスが付きます。

Neptune データアクセスポリシーステートメントでのクエリアクションの使用

データアクセスポリシーステートメントで使用できる Neptune クエリアクションには、ReadDataViaQueryWriteDataViaQueryDeleteDataViaQuery の 3 つがあります。特定のクエリには、これらのアクションを複数実行するためのアクセス許可が必要な場合があり、クエリを実行するためにこれらのアクションのどの組み合わせを許可する必要があるかが常に明確であるとは限りません。

クエリを実行する前に、Neptune はクエリの各ステップを実行するのに必要なアクセス許可を決定し、それらを組み合わせてクエリに必要なアクセス許可のフルセットにします。このフルセットのアクセス許可には、クエリが実行する可能性のあるすべてのアクションが含まれますが、必ずしもクエリがデータに対して実際に実行するアクションのセットではないことに注意してください。

つまり、特定のクエリの実行を許可するには、そのクエリが実際に実行するかどうかにかかわらず、そのクエリが実行する可能性のあるすべてのアクションにアクセス許可を与える必要があります。

以下に、Gremlin クエリの例をいくつか示します。これについてさらに詳しく説明しています。

  • g.V().count()

    g.V() および count() は読み取りアクセスだけを必要とするため、クエリ全体として必要なのは ReadDataViaQuery アクセスのみです。

  • g.addV()

    addV() は、新しい ID の頂点を挿入する前に、特定の ID の頂点が存在するかどうかを確認する必要があります。つまり、ReadDataViaQueryWriteDataViaQuery の両方のアクセスが必要です。

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

    g.V('1').as('a')out('created') は読み取りアクセスのみを必要としますが、addE().from('a') は読み取りと書き込みの両方のアクセスを必要とします。addE()from を読み取る必要があり、to は新しい ID のエッジを追加する前に、同じ ID のエッジが既に存在するかどうかを確認する必要があるためです。そのため、クエリ全体としては、ReadDataViaQueryWriteDataViaQuery の両方のアクセスが必要です。

  • g.V().drop()

    g.V() は読み取りアクセスのみを必要とします。drop() は頂点またはエッジを削除する前にそれらを読み取る必要があるため、読み取りアクセスと削除アクセスの両方が必要です。そのため、クエリ全体としては ReadDataViaQueryDeleteDataViaQuery の両方のアクセスが必要です。

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

    g.V('1') は読み取りアクセスのみを必要としますが、property(single, 'key1', 'value1') は読み取り、書き込み、および削除アクセスを必要とします。ここでは、property() ステップは、頂点にまだ存在しない場合はキーと値を挿入しますが、既に存在する場合は、既存のプロパティ値を削除し、代わりに新しい値を挿入します。したがって、クエリ全体としては、ReadDataViaQueryWriteDataViaQuery、および DeleteDataViaQuery アクセスが必要です。

    property() ステップを含むクエリには、ReadDataViaQueryWriteDataViaQuery、および DeleteDataViaQuery アクセス許可が必要です。

openCypher の例を次に示します。

  • MATCH (n) RETURN n

    このクエリはデータベース内のすべてのノードを読み込んで返します。必要なのは ReadDataViaQuery アクセスだけです。

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

    このクエリには、ReadDataViaQueryWriteDataViaQuery、および DeleteDataViaQuery アクセスが必要です。「Person」というラベルの付いたすべてのノードを読み取り、キー dept と値 AWS を持つ新しいプロパティを追加するか、dept プロパティが既に存在する場合は、古い値を削除して、代わりに AWS を挿入します。また、設定する値が null の場合、SET はプロパティをすべて削除します。

    SET 句は既存の値を削除しなければならない場合があるため、常に DeleteDataViaQuery アクセス許可だけでなく ReadDataViaQuery および WriteDataViaQuery アクセス許可も必要です。

  • MATCH (n:Person) DETACH DELETE n

    このクエリには ReadDataViaQuery および DeleteDataViaQuery アクセス許可が必要です。ラベル Person の付いたノードをすべrて検索し、それらのノードに接続されているエッジや関連するラベルやプロパティとともに削除します。

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

    このクエリには ReadDataViaQuery および WriteDataViaQuery アクセス許可が必要です。MERGE 句は、指定されたパターンと一致するか、それを作成します。パターンが一致しないと書き込みが発生する可能性があるため、読み取りアクセス許可だけでなく書き込みアクセス許可も必要です。