클라우드 시크릿 관리하기

클라우드 시크릿 관리하기

워크로드 자격 증명을 애플리케이션 코드와 분리해 저장해 봐요. 시크릿 읽기는 메타데이터만 반환하므로, 다른 곳에 필요하다면 원본 자격 증명을 시크릿 매니저에 보관하세요.

출처: 문서

본문

인증된 클라이언트를 사용하세요. 이 예시들은 이름 지정된 서비스의 토큰을 저장해요. 키트에 그 토큰 접근을 주는 방법은 저장된 시크릿을 샌드박스로 가져오기 문서를 참고하세요.

시크릿 만들기

표시 이름, 서비스 유형, 토큰 값, 멱등성 키를 전달하세요. 첨부와 이후 업데이트를 위해 반환된 리소스 이름을 저장하세요. 요청이나 토큰을 로그에 남기지 마세요.

핵심 코드:

return client.secrets.create(
  { displayName: name, serviceType, token: { value: token } },
  { idempotencyKey: requestId },
);

완전한 TypeScript 예시: secrets/create.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function createSecret(
  client: Sandboxes,
  name: string,
  serviceType: string,
  token: string,
  requestId: string,
) {
  return client.secrets.create(
    { displayName: name, serviceType, token: { value: token } },
    { idempotencyKey: requestId },
  );
}

저장된 자격 증명 나열

이름이나 레이블로 자격 증명을 찾으려면 시크릿 메타데이터를 나열해요. 예시는 각 페이지를 따라요. 나열은 시크릿 값을 드러내지 않아요.

시크릿을 샌드박스에 첨부할 때는 표시 이름이 아니라 리소스 이름을 사용하세요.

핵심 코드:

return client.secrets.all().collect();

완전한 TypeScript 예시: secrets/list.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function listSecrets(client: Sandboxes) {
  return client.secrets.all().collect();
}

자격 증명 회전

기존 시크릿을 읽고, 교체 값과 서비스 유형으로 핸들을 통해 업데이트해요. 핸들은 읽은 버전을 담고 있어 중간에 생긴 변경이 감지돼요.

업데이트는 레코드의 쓰기 가능한 콘텐츠를 교체해요. 생략된 값이 보존된다고 가정하지 말고 서비스 유형을 다시 보내세요. 이후 연산을 위해 반환된 메타데이터를 보관하세요.

다른 작성자가 시크릿을 변경했다면 다시 읽고 교체를 적용할지 결정하세요. 다른 회전을 조용히 덮어쓰지 마세요.

핵심 코드:

return secret.update(
  { serviceType, token: { value: token } },
  { idempotencyKey: requestId },
);

완전한 TypeScript 예시: secrets/update.ts

import type { Secret } from '@docker/sandboxes';

export async function updateSecret(
  secret: Secret,
  serviceType: string,
  token: string,
  requestId: string,
) {
  return secret.update(
    { serviceType, token: { value: token } },
    { idempotencyKey: requestId },
  );
}

시크릿 삭제

워크로드가 더 이상 자격 증명을 필요로 하지 않을 때 시크릿 핸들을 통해 삭제해요. 이미 없는 시크릿을 삭제하는 것은 반복 정리에 안전해요.

저장된 시크릿을 제거하는 것은 제공자에서 유출된 자격 증명을 취소하는 대체물이 아니에요. 손상된 자격 증명은 취소하고 새 워크로드를 시작하기 전에 교체하세요.

핵심 코드:

await secret.delete();

완전한 TypeScript 예시: secrets/delete.ts

import type { Secret } from '@docker/sandboxes';

export async function deleteSecret(secret: Secret) {
  await secret.delete();
}

더 알아보기 (Learn more)