(선택 사항) 스키마 생성(고급 사용자) - AWS Clean Rooms

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

(선택 사항) 스키마 생성(고급 사용자)

스키마 생성 기능은 고급 사용자를 위한 것입니다.

다음은 열 헤더가 있거나 없는 입력 파일의 JSON 스키마 파일 형식에 대한 설명입니다. 고급 사용자는 원하는 경우 스키마를 직접 작성하거나 수정할 수 있습니다.

참고

C3R 암호화 클라이언트는 예:sealed, fingerprint, cleartext 열을 사용하여 암호화 스키마 생성에서 설명하는 대화형 프로세스 또는 스텁 템플릿 생성을 통해 스키마를 만드는 데 도움을 줄 수 있습니다.

매핑된 테이블 스키마와 위치 테이블 스키마

다음 섹션에서는 두 종류의 테이블 스키마에 대해 설명합니다.

  • 매핑된 테이블 스키마 - 이 스키마는 헤더 행과 Apache Parquet 파일이 있는.csv 파일을 암호화하는 데 사용됩니다.

  • 위치 테이블 스키마 - 이 스키마는 헤더 행이 없는.csv 파일을 암호화하는 데 사용됩니다.

C3R 암호화 클라이언트는 공동 작업을 위해 표 형식 파일을 암호화할 수 있습니다. 이렇게 하려면 입력에서 암호화된 출력을 도출하는 방법을 지정하는 해당 스키마 파일이 있어야 합니다.

C3R 암호화 클라이언트는 명령줄에서 C3R 암호화 클라이언트 스키마 명령을 실행하여 INPUT 파일에 대한 스키마를 생성하는 데 도움을 줄 수 있습니다. 명령의 예는 java -jar c3r-cli.jar schema --interactive INPUT입니다.

이 스키마는 다음 정보를 지정합니다:

  1. 헤더 이름(매핑된 스키마) 또는 위치(위치 스키마)를 통해 출력 파일의 변환된 열에 매핑되는 원본 열

  2. 어떤 대상 열을 cleartext로 유지해야 할까요

  3. SELECT 쿼리를 위해 어떤 대상 열을 암호화해야 할까요

  4. JOIN 쿼리를 위해 어떤 대상 열을 암호화해야 할까요

이 정보는 테이블별 JSON 스키마 파일에 인코딩되며, 이 스키마 파일은 headerRow 필드가 Boolean 값인 단일 객체로 구성됩니다. 헤더 행이 있는 Parquet 파일 및 .csv 파일의 경우 값은 true여야 하며, 그렇지 않은 경우 false여야 합니다.

매핑된 테이블 스키마

매핑된 스키마의 모양은 다음과 같습니다.

{ "headerRow": true, "columns": [ { "sourceHeader": STRING, "targetHeader": STRING, "type": TYPE, "pad": PAD }, ... ] }

인 경우 headerRow 객체의 다음 필드는 소스 헤더를 대상 헤더에 매핑하는 열 스키마 배열 (즉columns, 출력 열에 포함되어야 하는 내용을 설명하는 JSON 객체) 을 포함하는 필드입니다. true

  • sourceHeader— 데이터가 파생된 소스 열의 STRING 헤더 이름.

    참고

    동일한 소스 열을 여러 대상 열에 사용할 수 있습니다.

    스키마 어디에도 sourceHeader로 나열되지 않은 입력 파일의 열은 출력 파일에 나타나지 않습니다.

  • targetHeader – 출력 파일에 있는 해당 열의 STRING 헤더 이름.

    참고

    이 필드는 매핑된 스키마의 경우 선택 사항입니다. 이 필드를 생략하면 출력의 헤더 이름으로 sourceHeader가 다시 사용됩니다. 출력 열이 fingerprint 열 또는 sealed 열인 경우 _fingerprint 또는 _sealed가 각각 추가됩니다.

  • type – 출력 파일에 있는 대상 열의 TYPE. 즉, 공동 작업에서 열이 사용되는 방식에 따라 cleartext, sealed 또는 fingerprint 중 하나를 선택합니다.

  • padTYPEsealed인 경우에만 존재하는 열 스키마 개체의 필드입니다.. PAD의 해당 값은 데이터를 암호화하기 전에 데이터를 어떻게 패딩해야 하는지를 설명하는 객체입니다.

    { "type": PAD_TYPE, "length": INT }

    사전 암호화 패딩을 지정하기 위해 typelength가 사용되며 다음과 같이 사용됩니다.

    • PAD_TYPE as none — 열의 데이터에 패딩이 적용되지 않으며 length 필드를 적용할 수 없습니다(즉, 생략).

    • PAD_TYPE as fixed — 열의 데이터가 지정된 length 바이트만큼 채워집니다.

    • PAD_TYPE as max — 가장 긴 값의 바이트 길이에 추가 length 바이트를 더한 크기로 열의 데이터가 채워집니다.

다음은 각 유형의 열이 있는 매핑된 스키마의 예시입니다.

{ "headerRow": true, "columns": [ { "sourceHeader": "FullName", "targetHeader": "name", "type": "cleartext" }, { "sourceHeader": "City", "targetHeader": "city_sealed", "type": "sealed", "pad": { "type": "max", "length": 16 } }, { "sourceHeader": "PhoneNumber", "targetHeader": "phone_number_fingerprint", "type": "fingerprint" }, { "sourceHeader": "PhoneNumber", "targetHeader": "phone_number_sealed", "type": "sealed", "pad": { "type": "fixed", "length": 20 } } ] }

좀 더 복잡한 예로, 다음은 헤더가 있는.csv 파일 예제입니다.

FirstName,LastName,Address,City,State,PhoneNumber,Title,Level,Notes Jorge,Souza,12345 Mills Rd,Anytown,SC,703-555-1234,CEO,10, Paulo,Santos,0 Street,Anytown,MD,404-555-111,CIO,9,This is a really long note that could really be a paragraph Mateo,Jackson,1 Two St,Anytown,NY,304-555-1324,COO,9,"" Terry,Whitlock4 N St,Anytown,VA,407-555-8888,EA,7,Secret notes Diego,Ramirez,9 Hollows Rd,Anytown,VA,407-555-1222,SDE I,4,null John,Doe,8 Hollows Rd,Anytown,VA,407-555-4321,SDE I,4,Jane's younger brother Jane,Doe,8 Hollows Rd,Anytown,VA,407-555-4322,SDE II,5,John's older sister

다음 매핑된 스키마 예제에서 열 FirstNameLastName은 열은 cleartext 열입니다. State 열은 fingerprint 열로 암호화되고 none의 패딩이 있는 sealed 열로 암호화됩니다. 나머지 열은 생략됩니다.

{ "headerRow": true, "columns": [ { "sourceHeader": "FirstName", "targetHeader": "GivenName", "type": "cleartext" }, { "sourceHeader": "LastName", "targetHeader": "Surname", "type": "cleartext" }, { "sourceHeader": "State", "targetHeader": "State_Join", "type": "fingerprint" }, { "sourceHeader": "State", "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ] }

다음은 매핑된 스키마의 결과인.csv 파일입니다.

givenname,surname,state_fingerprint,state John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:FQ3n3Ahv9BQQNWQGcugeHzHYzEZE1vapHa2Uu4SRgSAtZ3qObjPA4TcsHt+BOkMKBcnHWI13BeGG/SBqmj7vKpI= Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:KZ5n5GtaXACco65AXk48BQO2durDNR2ULc4YxmMC8NaZZKKJiksU1IwFadAvV4iBQ1Bus5TU5c4biez3bilfTY8= Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:mLKpS5HIOSgphdEsrzhEdIp/eN9nBO2gAbIygt4OFn4LalYn9Xyj/XUWXlmn8zFe2T4kyDTD8kGOvpQEUGxAUFk= Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:rmZhT98Zm+IIGw1UTjMIJP4IrW/AAltBLMXcHvnYfRgmWP623VFQ6aUnhsb2MDqEw4G5Uwg5rKKZepUxx5uKbfk= Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:vVaqWC1VRbhvkf8gnuR7q0zxVPcvEjuaglYz34+KyyLcGZLpAmsDUc6wZ07f2KvHoOySqRsEU7dG1QfdHYcTSWE= Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:3c9VEWbODO/xbQjdGuccLvI7oZTBdPU+SyrJIyr2kudfAxbuMQ2uRdU/q7rbgyJjxZS8M2U35ILJf/lDgTyg7cM= Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9RWv46YLveykeNZ/G0NdlYFg+AVdOnu05hHyAYTQkPLHnyX+0/jbzD/g9ZT8GCgVE9aB5bV4ooJIXHGBVMXcjrQ=

위치 테이블 스키마

위치 스키마의 모양은 다음과 같습니다.

{ "headerRow": false, "columns": [ [ { "targetHeader": STRING, "type": TYPE, "pad": PAD }, { "targetHeader": STRING, "type": TYPE, "pad": PAD } ], [], ... ] }

headerRowfalse인 경우, 개체의 다음 필드는 columns이고 이는 항목 배열을 포함하는 필드입니다. 각 항목 자체는 0개 이상의 위치 열 스키마 (sourceHeader필드 없음) 로 구성된 배열이며, 이 스키마는 출력에 포함되어야 하는 내용을 설명하는 JSON 객체입니다.

  • sourceHeader— 데이터가 파생되는 소스 열의 STRING 헤더 이름.

    참고

    위치 스키마에서는 이 필드를 생략해야 합니다. 위치 스키마에서 소스 열은 스키마 파일에 있는 열의 해당 인덱스에 의해 유추됩니다.

  • targetHeader— 출력 파일에 있는 해당 열의 STRING 헤더 이름.

    참고

    이 필드는 위치 스키마에 필요합니다.

  • type— 출력 파일에 있는 대상 열의 TYPE. 즉, 공동 작업에서 열이 사용되는 방식에 따라 cleartext, sealed 또는 fingerprint 중 하나를 선택합니다.

  • padTYPEsealed인 경우에만 존재하는 열 스키마 개체의 필드입니다.. PAD의 해당 값은 데이터를 암호화하기 전에 데이터를 어떻게 패딩해야 하는지를 설명하는 객체입니다.

    { "type": PAD_TYPE, "length": INT }

    사전 암호화 패딩을 지정하기 위해 typelength가 사용되며 다음과 같이 사용됩니다.

    • PAD_TYPE as none — 열의 데이터에 패딩이 적용되지 않으며 length 필드를 적용할 수 없습니다(즉, 생략).

    • PAD_TYPE as fixed — 열의 데이터가 지정된 length 바이트만큼 채워집니다.

    • PAD_TYPE as max — 가장 긴 값의 바이트 길이에 추가 length 바이트를 더한 크기로 열의 데이터가 채워집니다.

      참고

      fixed 열 데이터의 바이트 크기 상한을 미리 알고 있는 경우에 유용합니다. 해당 열의 데이터가 지정된 length 값보다 길면 오류가 발생합니다.

      max는 입력 데이터의 정확한 크기를 알 수 없는 경우 데이터 크기와 상관없이 작동하므로 편리합니다. 하지만 max는 데이터를 두 번 암호화하기 때문에 추가 처리 시간이 필요합니다. max는 임시 파일에 읽어올 때 데이터를 한 번 암호화하고 열에 가장 긴 데이터 입력을 알고 나면 한 번 암호화합니다.

      또한 가장 긴 값의 길이는 클라이언트 호출 사이에 저장되지 않습니다. 데이터를 일괄적으로 암호화하거나 새 데이터를 주기적으로 암호화하려는 경우 결과 사이퍼텍스트 -길이는 배치마다 다를 수 있다는 점에 유의하세요.

다음은 위치 스키마의 예입니다.

{ "headerRow": false, "columns": [ [ { "targetHeader": "name", "type": "cleartext" } ], [ { "targetHeader": "city_sealed", "type": "sealed", "pad": { "type": "max", "length": 16 } } ], [ { "targetHeader": "phone_number_fingerprint", "type": "fingerprint" }, { "targetHeader": "phone_number_sealed", "type": "sealed", "pad": { "type": "fixed", "length": 20 } } ] ] }

복잡한 예로, 다음은.csv 파일의 첫 번째 행에 헤더가 없는 경우의 예시.csv 파일입니다.

Jorge,Souza,12345 Mills Rd,Anytown,SC, 703 -555 -1234,CEO, 10, Paulo,Santos, 0 Street,Anytown,MD, 404-555-111,CIO, 9,This is a really long note that could really be a paragraph Mateo,Jackson, 1 Two St,Anytown,NY, 304-555-1324,COO, 9, "" Terry,Whitlock, 4 N St,Anytown,VA, 407-555-8888,EA, 7,Secret notes Diego,Ramirez, 9 Hollows Rd,Anytown,VA, 407-555-1222,SDE I, 4,null John,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4321,SDE I, 4,Jane's younger brother Jane,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4322,SDE II, 5,John's older sister

위치 스키마의 형식은 다음과 같습니다.

{ "headerRow": false, "columns": [ [ { "targetHeader": "GivenName", "type": "cleartext" } ], [ { "targetHeader": "Surname", "type": "cleartext" } ], [], [], [ { "targetHeader": "State_Join", "type": "fingerprint" }, { "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ], [], [], [], [] ] }

위의 스키마는 지정된 대상 헤더를 포함하는 헤더 행과 함께 다음과 같은 출력 파일을 생성합니다.

givenname,surname,state_fingerprint,state Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:ENS6QD3cMVl9vQEGfe9MNWfR0UOupchswZFr94zOMG5jY/Q8m/Y5SA89dJwKpT5rGPp8e36h6klwDoslpFzGvU0= Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:LKo0zirq2++XEIIIMNRjAsGMdyWUDwYaum0B+IFP+rUf1BNeZDJjtFe1Z+zbZfXQWwJy52Rt7HqvAb2WIK1oMmk= Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:MyQKyWxJ9kvK1xDQQtXlUNwv3F+yrBRr0xrUY/1BGg5KFgOn9pK+MZ7g+ZNqZEPcPz4lht1u0t/wbTaqzOCLXFQ= Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Pd8sbITBfb0/ttUB4svVsgoYkDfnDvgkvxzeci0Yxq54rLSwccy1o3/B50C3cpkkn56dovCwzgmmPNwrmCmYtb4= Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Qmtzu3B3GAXKh2KkRYTiEAaMopYedsSdF2e/ADUiBQ9kv2CxKPzWyYTD3ztmKPMka19dHre5VhUHNpO3O+j1AQ8= Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:ysdg+GHKdeZrS/geBIooOEPLHG68MsWpx1dh3xjb+fG5rmFmqUcJLNuuYBHhHAlxchM2WVeV1fmHkBX3mvZNvkc= John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9uX0wZuO7kAPAx+Hf6uvQownkWqFSKtWS7gQIJSe5aXFquKWCK6yZN0X5Ea2N3bn03Uj1kh0agDWoiP9FRZGJA4=