객체의 CipherText 표시, 복호화와 편집
Cipher로 암호화한 속성은 Workshop이나 Object Explorer에서 값별로 복호화할 수 있습니다. 사용자에게 같은 채널의 적절한 Operational User License 접근이 필요하며, 설정된 사유 확인이 있으면 제출한 뒤 원래 값을 확인합니다.
온톨로지 속성 설정
Ontology Manager의 Properties에서 암호화한 각 필드의 Property Type을 Cipher text로 지정합니다. Plaintext Type에는 암호화 전 데이터형을 설정할 수 있습니다. 처음에 비어 있거나 암호화되지 않은 값을 편집할 때 사용할 채널은 Default Encryption Cipher Channel로 지정합니다.
CipherText 속성에는 Encrypted Value 표시 방식이 적용됩니다. Workshop과 Object Explorer를 포함한 여러 화면에서 암호화된 값을 선택해 허용된 복호화를 수행할 수 있습니다.
이전에는 문자열 속성의 Value Formatting > RID Renderer로 암호문을 표시했지만, 새 구성에는 CipherText 속성형을 사용하는 방식을 권장합니다.
편집 방식
암호화한 이름의 오타 수정 같은 작업은 updateAsync()를 사용하는 함수를 액션에 연결하는 방식을 권장합니다.
이전 방식의 인라인 편집에는 속성 타입클래스 cipher: editable을 추가할 수 있습니다. 이 경로는 Object Storage v1에 저장된 객체와 API 편집 허용이 필요하며 일반적인 권장 방식은 아닙니다. 사용자는 값을 다시 암호화할 수 있는 라이선스도 가져야 합니다.
Functions에서 사용할 권한
Cipher를 Functions에서 사용하려면 Operational User License가 필요합니다. 해당 암호화, 해시나 복호화에 Checkpoint가 설정되어 있다면, 화면을 표시할 수 없는 Functions 경로에 사용하도록 라이선스의 Checkpoint 우회를 허용해야 합니다. 이 경우에도 값 단위 감사와 사용량 제한은 유지됩니다.
다음은 가상의 EncryptedCustomer 객체 유형 예입니다. 생성된 TypeScript 바인딩 이름은 EncryptedCustomers라고 가정합니다. 속성은 암호화된 CipherText name과 고유한 비암호화 정수 id입니다. 실제 저장소에서는 가져온 온톨로지 유형의 바인딩 이름을 사용합니다.
이름 복호화와 암호문 갱신 함수
다음은 두 함수를 포함한 완전한 클래스입니다. decryptEncryptedCustomer()는 이름이 있으면 복호화한 문자열을, 없으면 undefined를 반환합니다. 반환값은 평문이므로 이 값을 받는 애플리케이션의 접근과 저장 경로를 관리해야 합니다.
updateEncryptedName()은 같은 객체의 암호화된 이름을 새 값으로 갱신합니다. 객체를 변경하므로 @OntologyEditFunction()과 @Edits(EncryptedCustomers)가 필요합니다. 편집할 CipherText 속성이 없으면 명시적으로 오류를 내며, 아무 변경도 하지 않고 성공한 것처럼 반환하지 않습니다.
import { Edits, Function, OntologyEditFunction } from "@foundry/functions-api";
import { EncryptedCustomers } from "@foundry/ontology-api";
export class CipherCustomerFunctions {
@Function()
public async decryptEncryptedCustomer(
customer: EncryptedCustomers,
): Promise<string | undefined> {
return await customer.name?.decryptAsync();
}
@OntologyEditFunction()
@Edits(EncryptedCustomers)
public async updateEncryptedName(
customer: EncryptedCustomers,
newName: string,
): Promise<void> {
const encryptedName = customer.name;
if (encryptedName === undefined) {
throw new Error("편집할 CipherText name 속성이 없습니다.");
}
await encryptedName.updateAsync(newName);
}
}
객체 편집 함수는 Preview에서 실행해도 실제 객체를 수정하지 않습니다. 운영 편집에는 이 함수를 적절한 액션에 연결하고 액션 자체의 제출 조건과 권한도 구성합니다. 열 전체를 변환하는 Data Manager 및 Admin License 경로는 데이터셋 열 연산과 구분합니다.