Amazon Neptune에 대한 사용자 지정 IAM 데이터 액세스 정책문 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Neptune에 대한 사용자 지정 IAM 데이터 액세스 정책문

Neptune 데이터 액세스 정책 명령문은 데이터 액세스 작업, 리소스조건 키를 사용하며, 모두 앞에 neptune-db: 접두사가 붙습니다.

Neptune 데이터 액세스 정책문에서 쿼리 작업 사용

데이터 액세스 정책문에 사용할 수 있는 3가지 Neptune 쿼리 작업(ReadDataViaQuery, WriteDataViaQuery, DeleteDataViaQuery)이 있습니다. 특정 쿼리에는 이러한 작업을 2개 이상 수행할 수 있는 권한이 필요할 수 있으며, 쿼리를 실행하기 위해 이러한 작업의 조합을 허용해야 하는지 명확하지 않을 수 있습니다.

Neptune은 쿼리를 실행하기 전에 쿼리의 각 단계를 실행하는 데 필요한 권한을 결정하고, 이를 쿼리에 필요한 전체 권한 세트로 결합합니다. 이 전체 권한 세트에는 쿼리가 수행할 수 있는 모든 작업이 포함된다는 점에 유의하세요. 이는 데이터를 대상으로 실행될 때 쿼리가 실제로 수행하는 작업 세트일 필요는 없습니다.

즉, 특정 쿼리를 실행하도록 허용하려면 실제로 수행하는지 여부에 관계없이 쿼리가 수행할 수 있는 모든 작업에 대한 권한을 제공해야 합니다.

다음은 이에 대해 더 자세히 설명하는 몇 가지 Gremlin 쿼리 샘플입니다.

  • g.V().count()

    g.V()count()는 읽기 액세스 권한만 필요하므로, 전체 쿼리에는 ReadDataViaQuery 액세스만 필요합니다.

  • g.addV()

    addV()는 새 버텍스를 삽입하기 전에 주어진 ID를 가진 버텍스가 존재하는지 여부를 확인해야 합니다. 즉, ReadDataViaQueryWriteDataViaQuery 액세스가 둘 다 필요합니다.

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

    g.V('1').as('a')out('created')은 읽기 액세스 권한만 필요하지만, addE().from('a')은 읽기 액세스 권한과 쓰기 액세스 권한이 모두 필요합니다. addE()는 새로 추가하기 전에 fromto 버텍스를 읽고 ID가 같은 엣지가 이미 존재하는지 확인해야 하기 때문입니다. 따라서 전체 쿼리에는 ReadDataViaQueryWriteDataViaQuery 액세스가 모두 필요합니다.

  • g.V().drop()

    g.V()는 읽기 액세스 권한만 필요합니다. drop()은 버텍스나 엣지를 삭제하기 전에 읽어야 하므로, 읽기 액세스 권한과 삭제 액세스 권한이 모두 필요합니다. 따라서 전체 쿼리에는 ReadDataViaQueryDeleteDataViaQuery 액세스가 모두 필요합니다.

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

    g.V('1')는 읽기 액세스 권한만 필요하지만, property(single, 'key1', 'value1')는 읽기, 쓰기, 삭제 액세스 권한이 필요합니다. 이 property() 단계에서는 버텍스에 키와 값이 아직 없으면 해당 키와 값을 삽입하지만, 이미 존재하는 경우 기존 속성값을 삭제하고 그 자리에 새 값을 삽입합니다. 따라서 전체 쿼리에는 ReadDataViaQuery, WriteDataViaQuery, DeleteDataViaQuery 액세스 권한이 필요합니다.

    property() 단계가 포함된 모든 쿼리에는 ReadDataViaQuery, WriteDataViaQuery, DeleteDataViaQuery 권한이 필요합니다.

다음은 몇 가지 openCypher 예입니다.

  • MATCH (n) RETURN n

    이 쿼리는 데이터베이스의 모든 노드를 읽고 반환하며, ReadDataViaQuery 액세스만 필요합니다.

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

    이 쿼리에는 ReadDataViaQuery, WriteDataViaQuery, DeleteDataViaQuery 액세스가 필요합니다. 레이블이 'Person'인 모든 노드를 읽고 키 dept와 값 AWS가 포함된 새 속성을 추가하거나, dept 속성이 이미 있는 경우 이전 값을 삭제하고 대신 AWS를 삽입합니다. 또한 설정할 값이 null인 경우 SET는 속성을 모두 삭제합니다.

    SET 절에서 기존 값을 삭제해야 하는 경우도 있기 때문에 항상 DeleteDataViaQuery 권한과 ReadDataViaQueryWriteDataViaQuery 권한이 필요합니다.

  • MATCH (n:Person) DETACH DELETE n

    이 쿼리는 ReadDataViaQueryDeleteDataViaQuery 권한을 필요로 합니다. Person 레이블이 있는 모든 노드를 찾아 해당 노드에 연결된 엣지와 관련 레이블 및 속성과 함께 삭제합니다.

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

    이 쿼리는 ReadDataViaQueryWriteDataViaQuery 권한을 필요로 합니다. MERGE 절은 지정된 패턴과 일치하거나 패턴을 생성합니다. 패턴이 일치하지 않으면 쓰기가 발생할 수 있으므로, 읽기 권한뿐만 아니라 쓰기 권한도 필요합니다.