연결의 암호화 속성과 비밀값
비밀번호, API 키, 개인 액세스 토큰과 개인키처럼 비밀을 담는 연결 속성은 EncryptedProperty를 사용합니다. 읽을 때는 비밀 이름을 반환하고, 쓸 때는 평문 값을 암호화하여 저장하거나 같은 속성의 기존 비밀 이름으로 저장된 값을 유지합니다.
두 가지 표현
type | 필수 필드 | 동작 |
|---|---|---|
asPlaintextValue | value: string | 전달한 평문을 암호화하여 해당 속성에 저장 |
asSecretName | value: string | 해당 속성의 기존 비밀 이름과 일치해야 하며 저장된 암호화 값을 유지 |
다음은 비밀번호 입력 구조를 설명하는 가상 값입니다. 실제 인증 정보와 해당 필드가 요구하는 형식을 사용해야 합니다.
{"type": "asPlaintextValue", "value": "example-password"}
조회한 속성이 다음과 같다면 Password는 비밀 이름입니다. 다른 연결의 비밀을 가져오는 경로나 새 비밀을 만드는 이름으로 사용하지 않습니다.
{"type": "asSecretName", "value": "Password"}
개인키처럼 형식 요구가 있는 속성에는 실제 키의 내용을 넣습니다. 일반 비밀번호 예시 문자열을 개인키로 사용하지 않습니다. jdbcProperties 같은 일반 속성 맵에는 비밀값을 넣지 않습니다.
전송, 저장과 메모리 처리
연결 생성과 비밀 갱신의 요청 본문에 넣은 비밀은 TLS로 전송되고 서버에 암호화하여 저장됩니다. 서버가 값을 처리하는 동안에는 일시적으로 복호화한 평문이 메모리에 남으며, 가비지 컬렉션으로 해당 메모리가 정리될 때까지 유지됩니다.
이 API를 사용하면 이러한 일시적 메모리 처리의 잠재적 위험을 인정하고 수용하는 조건이 적용됩니다. 이 방식을 원하지 않으면 Foundry UI에서 비밀을 설정합니다. API 입력을 준비할 때도 실제 비밀을 소스 코드나 공유 로그에 남기지 않습니다.
REST 추가 비밀과 갱신 맵
REST의 추가 비밀은 additionalSecrets에서 별도 형태를 사용합니다.
| 용도 | 형태 |
|---|---|
| 추가 비밀 입력 | {"type":"asSecretsWithPlaintextValues","secrets":{"이름":"평문 값"}} |
| 추가 비밀 조회 | {"type":"asSecretsNames","secretNames":["이름"]} |
secrets는 map<SecretName, PlaintextValue>, secretNames는 list<SecretName>이며 두 필드는 각각 선택 필드입니다. additionalSecrets 자체를 생략하면 추가 비밀을 만들지 않습니다.
Update Secrets For Connection은 이 구분자 객체 대신 {"secrets":{"이름":"평문 값"}} 본문을 받습니다. 이름은 해당 연결에 이미 구성되어 있어야 합니다. 요청에서 빠진 기존 비밀은 그대로 유지합니다.