비컨 사용 - AWS 데이터베이스 암호화 SDK

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

비컨 사용

클라이언트 측 암호화 라이브러리는 AWS 데이터베이스 암호화 SDK로 이름이 변경되었습니다. 이 개발자 안내서는 여전히 DynamoDB Encryption Client에 대한 정보를 제공합니다.

비컨을 사용하면 쿼리 중인 전체 데이터베이스를 복호화하지 않고도 암호화된 레코드를 검색할 수 있습니다. 비컨은 채워지지 않은 새 데이터베이스에 구현되도록 설계되었습니다. 기존 데이터베이스에 구성된 모든 비컨은 데이터베이스에 기록된 새 레코드만 매핑합니다. 비컨은 필드의 일반 텍스트 값에서 계산됩니다. 필드가 암호화되면 비컨이 기존 데이터를 매핑할 방법이 없습니다. 비컨으로 새 레코드를 작성한 후에는 비컨의 구성을 업데이트할 수 없습니다. 하지만 레코드에 추가하는 새 필드에 새 비컨을 추가할 수 있습니다.

비컨을 구성한 후에는 데이터베이스를 채우고 비컨에 대한 쿼리를 수행하기 전에 다음 단계를 완료해야 합니다.

  1. 계층적 키링 생성 AWS KMS

    검색 가능한 암호화를 사용하려면 AWS KMS 계층적 키링을 사용하여 레코드 보호에 사용되는 데이터 키를 생성, 암호화 및 복호화해야 합니다.

    비컨을 구성한 후 계층적 키링 사전 요구 사항을 조합하고 계층적 키링을 생성합니다.

    계층적 키링이 필요한 이유에 대한 자세한 내용은 검색 가능한 암호화를 위한 계층적 키링 사용을 참조하세요.

  2. 비컨 버전 정의

    구성한 모든 표준 비콘 목록, 구성한 모든 복합 비콘 목록, 암호화된 부품 목록, 서명된 부품 목록 및 비콘 버전을 지정합니다. keyStore keySource 비컨 버전에 대해 1을 지정해야 합니다. keySource 정의에 대한 지침은 비컨 키 소스 정의하기 섹션을 참조하세요.

    다음 Java 예제는 단일 테넌트 데이터베이스의 비컨 버전을 정의합니다. 멀티테넌트 데이터베이스의 비컨 버전을 정의하는 데 도움이 필요하면 멀티테넌트 데이터베이스의 검색 가능한 암호화를 참조하세요.

    Java
    List<BeaconVersion> beaconVersions = new ArrayList<>(); beaconVersions.add( BeaconVersion.builder() .standardBeacons(standardBeaconList) .compoundBeacons(compoundBeaconList) .encryptedParts(encryptedPartsList) .signedParts(signedPartsList) .version(1) // MUST be 1 .keyStore(keyStore) .keySource(BeaconKeySource.builder() .single(SingleKeyStore.builder() .keyId(branchKeyId) .cacheTTL(6000) .build()) .build()) .build() );
    C# / .NET
    var beaconVersions = new List<BeaconVersion> { new BeaconVersion { StandardBeacons = standardBeaconList, CompoundBeacons = compoundBeaconList, EncryptedParts = encryptedPartsList, SignedParts = signedPartsList, Version = 1, // MUST be 1 KeyStore = branchKeyStoreName, KeySource = new BeaconKeySource { Single = new SingleKeyStore { KeyId = branch-key-id, CacheTTL = 6000 } } } };
  3. 보조 인덱스 구성

    비컨을 구성한 후 암호화된 필드를 검색하려면 먼저 각 비컨을 반영하는 보조 인덱스를 구성해야 합니다. 자세한 정보는 비컨을 사용한 보조 인덱스 구성을 참조하세요.

  4. 암호화 작업 정의

    표준 비컨을 구성하는 데 사용되는 모든 필드를 ENCRYPT_AND_SIGN으로 표시해야 합니다. 비콘을 구성하는 데 사용되는 다른 모든 필드에는 또는 표시가 있어야 합니다. SIGN_ONLY SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT

  5. AWS 데이터베이스 암호화 SDK 클라이언트 구성

    DynamoDB 테이블의 테이블 항목을 보호하는 AWS 데이터베이스 암호화 SDK 클라이언트를 구성하려면 DynamoDB용 Java 클라이언트 측 암호화 라이브러리를 참조하십시오.

비컨 쿼리

구성하는 비컨의 유형에 따라 수행할 수 있는 쿼리 유형이 결정됩니다. 표준 비컨은 필터 표현식을 사용하여 동등 검색을 수행합니다. 복합 비컨은 리터럴 일반 텍스트 문자열과 표준 비컨을 결합하여 복잡한 쿼리를 수행합니다. 암호화된 데이터를 쿼리할 때는 비컨 이름을 검색합니다.

두 표준 비컨에 동일한 기본 일반 텍스트가 포함되어 있더라도 두 표준 비컨의 값을 비교할 수는 없습니다. 두 개의 표준 비컨은 동일한 일반 텍스트 값에 대해 서로 다른 두 개의 HMAC 태그를 생성합니다. 따라서 표준 비컨은 다음 쿼리를 수행할 수 없습니다.

  • beacon1 = beacon2

  • beacon1 IN (beacon2)

  • value IN (beacon1, beacon2, ...)

  • CONTAINS(beacon1, beacon2)

복합 비컨은 다음 쿼리를 수행할 수 있습니다.

  • BEGINS_WITH(a), 여기서 a는 조립된 복합 비컨이 시작하는 필드의 전체 값을 반영합니다. BEGINS_WITH 연산자를 사용하여 특정 하위 문자열로 시작하는 값을 식별할 수 없습니다. 하지만 BEGINS_WITH(S_)을 사용할 수 있으며, 여기서 S_는 조립된 복합 비컨이 시작하는 부분의 접두사를 반영합니다.

  • CONTAINS(a), 여기서 a는 조립된 복합 비컨에 포함된 필드의 전체 값을 반영합니다. CONTAINS 연산자를 사용하여 세트 내의 특정 하위 문자열이나 값이 포함된 레코드를 식별할 수 없습니다.

    예를 들어 a이 세트의 값을 반영하는 쿼리 CONTAINS(path, "a"는 수행할 수 없습니다.

  • 복합 비컨의 서명된 부분을 비교할 수 있습니다. 서명된 부분을 비교할 때 선택적으로 하나 이상의 서명된 부분에 암호화된 부분의 접두사를 추가할 수 있지만 암호화된 필드의 값을 쿼리에 포함할 수는 없습니다.

    예를 들어 서명된 부분을 비교하고 signedField1 = signedField2 또는 value IN (signedField1, signedField2, ...)에 대해 쿼리할 수 있습니다.

    signedField1.A_ = signedField2.B_에 대한 쿼리에 의해 서명된 부분과 암호화된 부분의 접두사를 비교할 수도 있습니다.

  • field BETWEEN a AND b, 여기서 ab는 서명된 부분입니다. 암호화된 부분의 접두사를 하나 이상의 서명된 부분에 선택적으로 추가할 수 있지만 암호화된 필드의 값을 쿼리에 포함할 수는 없습니다.

복합 비컨에 대한 쿼리에 포함시키는 각 부분의 접두사를 포함해야 합니다. 예를 들어, 두 개의 필드, encryptedFieldsignedField로부터 복합 비컨 compoundBeacon을 구성한 경우, 비컨을 쿼리할 때 이 두 부분에 대해 구성된 접두사를 포함해야 합니다.

compoundBeacon = E_encryptedFieldValue.S_signedFieldValue