Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

연결의 기존 비밀값 갱신(Update Secrets For Connection) (V2)

연결에 이미 구성한 비밀의 값을 바꿉니다. secrets의 키는 기존 비밀 이름이어야 합니다. 요청에서 빠진 기존 비밀은 변경하지 않으며, 이 엔드포인트로 새 비밀 이름을 만들지는 않습니다.

요청 본문의 비밀은 TLS로 전송되고 서버에 암호화하여 저장됩니다. 처리 중에는 일시적으로 복호화한 평문이 메모리에 남으며 가비지 컬렉션으로 정리될 때까지 유지됩니다. 이 API를 사용하면 이 메모리 처리의 잠재적 위험을 인정하고 수용하는 조건이 적용됩니다. 이 방식을 원하지 않으면 Foundry UI를 사용합니다.

HTTP 요청

POST /api/v2/connectivity/connections/{connectionRid}/updateSecrets

작업 식별자는 v2.updateSecretsForConnection입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:connectivity-connection-write 권한 범위가 필요합니다. 각 요청에 Authorization: Bearer <접근 토큰>을 전달합니다.

경로 매개변수

이름자료형필수 여부의미와 조건예시 값
connectionRidstring필수소스라고도 부르는 Connection의 RID입니다.ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b

쿼리 매개변수

지정할 쿼리 매개변수가 없습니다.

요청 본문

UpdateSecretsForConnectionRequest 본문은 필수이고 secrets는 비밀 이름과 새 평문 값의 맵입니다. 아래 값은 본문 형태를 설명하는 가상 예시이며 언어별 실행 예제는 실제 입력 파일을 사용합니다.

이름자료형필수 여부의미와 조건예시 값
secretsmap<SecretName, PlaintextValue>선택갱신할 비밀의 이름과 값입니다. 지정한 비밀 이름은 해당 연결에 이미 구성되어 있어야 합니다.

secrets의 구조

맵의 키는 SecretName(string), 값은 PlaintextValue(string)입니다.

다음 본문의 식별자와 값은 가상 예시입니다.

{
  "secrets": {
    "Password": "MySecretPassword"
  }
}

응답

성공 응답에 반환할 본문 모델이 없습니다.

개별 오류

오류 이름오류 코드HTTP의미와 조건추가 매개변수
SecretNamesDoNotExistINVALID_ARGUMENT400입력한 비밀 이름이 해당 연결에 없습니다.connectionRid, secretNames
UpdateSecretsForConnectionPermissionDeniedPERMISSION_DENIED403연결의 비밀값을 갱신할 수 없습니다.connectionRid
ConnectionNotFoundNOT_FOUND404지정한 연결을 찾을 수 없습니다.connectionRid

요청 예제

FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 예시 RID와 매개변수는 실제 작업 대상으로 바꿉니다.

CONNECTION_SECRETS_FILE에는 {"secrets":{"기존 비밀 이름":"새 평문 값"}} 구조의 UTF-8 JSON 파일 경로를 지정합니다. 실제 비밀 이름은 현재 연결 구성을 조회하여 확인합니다. 파일에는 비밀이 들어 있으므로 접근을 제한하고 코드 저장소나 공유 로그에 포함하지 않습니다. 이 요청은 파일에 지정한 기존 비밀값을 변경합니다.

cURL

curl -X POST \
	-H "Content-type: application/json" \
	-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
	"https://${FOUNDRY_HOST}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/updateSecrets" \
	--data-binary "@${CONNECTION_SECRETS_FILE}"

Python

Requests 라이브러리가 설치된 환경에서 사용합니다.

import os
import requests

HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
    "content-type": "application/json",
    "authorization": "Bearer {}".format(TOKEN)
}
with open(os.environ["CONNECTION_SECRETS_FILE"], "rb") as file_body:
    response = requests.post('https://{}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/updateSecrets'.format(HOSTNAME), headers=headers, data=file_body)
print(response)

Java

Apache HttpClient 4.5 API를 사용하는 UpdateSecretsForConnectionExample.java 예제입니다.

import java.io.File;
import org.apache.http.entity.FileEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.entity.ContentType;

public class UpdateSecretsForConnectionExample {
    public static void main(String[] args) throws Exception {
        String HOSTNAME = System.getenv("FOUNDRY_HOST");
        String TOKEN = System.getenv("FOUNDRY_TOKEN");

        try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
            HttpPost request = new HttpPost("https://" + HOSTNAME + "/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/updateSecrets");
            request.addHeader("content-type", "application/json");
            request.addHeader("authorization", String.format("Bearer %s", TOKEN));
            request.setEntity(new FileEntity(new File(System.getenv("CONNECTION_SECRETS_FILE")), ContentType.APPLICATION_JSON));
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                System.out.println(response);
            }
        }
    }
}

JavaScript

fetch를 제공하는 Node.js의 ES 모듈(.mjs)에서 사용합니다. 파일을 바이트로 읽어 전송하며 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.

import { readFileSync } from "node:fs";

const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;

fetch(`https://${HOSTNAME}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/updateSecrets`, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${TOKEN}`,
    },
    body: readFileSync(process.env.CONNECTION_SECRETS_FILE)
}).then((response) => {
    console.log(response)
});

PowerShell

오류가 발생하면 예제를 중단하도록 $ErrorActionPreference를 설정합니다.

$ErrorActionPreference = 'Stop'
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST

$headers = @{
    "authorization" = "Bearer $TOKEN"
}

$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/updateSecrets" `
	-Method Post `
	-Headers $headers `
	-ContentType application/json `
	-InFile $env:CONNECTION_SECRETS_FILE

$response.content