보안 비밀

이 페이지에서는 Kubernetes의 보안 비밀 객체와 Google Kubernetes Engine에서 이를 사용하는 방법을 설명합니다.

보안 비밀이란 무엇인가요?

보안 비밀은 비밀번호, OAuth 토큰, SSH 키와 같은 민감한 데이터를 클러스터에 저장하는 보안 객체입니다. 민감한 데이터를 보안 비밀에 저장하면 일반 텍스트로 된 ConfigMaps 또는 포드 사양에 저장하는 것보다 안전합니다. 보안 비밀을 사용하면 사용되는 데이터의 민감성을 제어하고 승인되지 않은 사용자에게 데이터가 노출될 위험을 줄일 수 있습니다.

보안 비밀 만들기

다음 명령어를 사용하여 보안 비밀을 만듭니다.

kubectl create secret [TYPE] [NAME] [DATA]

[TYPE]은 다음 중 하나일 수 있습니다.

  • generic: 로컬 파일, 디렉토리 또는 리터럴 값에서 보안 비밀을 만듭니다.
  • docker-registry: Docker 레지스트리에 사용하기 위한 dockercfg 보안 비밀을 만듭니다. Docker 레지스트리에 대해 인증을 수행하는 데 사용됩니다.
  • tls: 지정된 공개/비공개 키 쌍에서 TLS 보안 비밀을 만듭니다. 공개/비공개 키 쌍이 미리 존재해야 합니다. 공개 키 인증서가 .PEM으로 인코딩되고 지정된 비공개 키와 일치해야 합니다.

대부분의 보안 비밀에 대해서는 generic 유형을 사용합니다.

[DATA]는 다음 중 하나일 수 있습니다.

  • --from-file 또는 --from-env-file 플래그를 사용하여 표시된 하나 이상의 구성 파일이 포함된 디렉토리 경로
  • 각각 --from-literal 플래그를 사용하여 지정되는 키-값 쌍

kubectl create에 대한 자세한 내용은 참조 문서를 참조하세요.

또는 YAML 매니페스트 파일에 보안 비밀 객체를 정의하고 kubectl create -f [FILE]을 사용해서 객체를 배포하여 보안 비밀을 만들 수 있습니다. 예제를 보려면 보안 비밀을 사용하여 사용자 인증 정보를 안전하게 배포를 참조하세요.

파일에서

하나 이상의 파일에서 보안 비밀을 만들려면 --from-file 또는 --from-env-file을 사용합니다. 파일은 일반 텍스트여야 하지만 파일의 확장명은 상관없습니다.

--from-file

--from-file을 사용하여 보안 비밀을 만들면 보안 비밀의 값이 파일의 전체 내용이 됩니다. 보안 비밀의 값에 여러 키-값 쌍이 포함된 경우, --from-env-file을 대신 사용하세요.

단일 파일 또는 여러 파일을 전달할 수 있습니다.

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/FILE] --from-file [/PATH/TO/FILE2]

또한 여러 파일이 포함된 디렉토리를 전달할 수도 있습니다.

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/DIRECTORY]

예를 들어 다음 명령어는 2개의 파일(username.txtpassword.txt)에서 credentials라는 보안 비밀을 만들고 키를 username.txtpassword.txt로 각각 설정합니다.

kubectl create secret generic credentials --from-file ./username.txt --from-file ./password.txt

보안 비밀 값은 Kubernetes에서 base-64로 인코딩됩니다.

kubectl get secret credentials -o yaml을 실행하면 다음 출력이 반환됩니다.

apiVersion: v1
data:
  password.txt: MTIzNAo=
  username.txt: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

기본적으로 키는 파일 이름입니다. --from-file의 확장 구문을 사용하여 키를 재정의할 수 있습니다.

kubectl create secret [TYPE] [NAME] --from-file=KEY=[/PATH/TO/DIRECTORY]

다음 예는 앞의 예와 동일하지만 파일 이름을 사용하는 대신 키를 usernamepassword로 설정합니다.

kubectl create secret generic credentials --from-file=username=./username.txt --from-file=password=./password.txt

--from-env-file

여러 키-값 쌍을 단일 보안 비밀에 로드하려면 키-값 쌍을 하나 이상의 일반 텍스트 파일에 저장하고 --from-file 대신 --from-env-file을 사용하여 로드합니다. 플래그를 여러 번 지정하여 여러 파일을 로드할 수 있습니다. --from-file과 동일한 제한사항이 적용됩니다.

예를 들어 다음 명령어는 여러 키-값 쌍이 포함된 단일 파일 credentials.txt에서 credentials라는 보안 비밀을 만듭니다.

# Each of these key-value pairs is loaded into the Secret
username=jane
password=d7xnNss7EGCFZusG

보안 비밀 값은 Kubernetes에서 base64로 인코딩됩니다.

kubectl create secret generic credentials --from-env-file ./credentials.txt

kubectl get secret credentials -o yaml을 실행하면 다음 출력이 반환됩니다.

apiVersion: v1
data:
  credentials.txt:
    username: YWRtaW4K
    password: MTIzNA==
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

제한사항

symlink, 장치, 파이프와 같은 비 일반적인 파일은 kubectl에서 무시됩니다. 하위 디렉토리도 무시됩니다. kubectl create secret는 하위 디렉토리로 재귀 실행되지 않습니다.

리터럴 값에서

리터럴 값에서 보안 비밀을 만들려면 --from-literal을 사용합니다.

예를 들어 다음 명령어는 2개의 키-값 쌍이 포함된 literal-token이라는 일반 보안 비밀을 만듭니다.

kubectl create secret generic literal-token --from-literal user=admin --from-literal password=1234

각 키-값 쌍에 --from-literal을 지정합니다. 값은 자동으로 base64로 인코딩됩니다.

kubectl get secret literal-token -o yaml을 실행하면 다음 출력이 반환됩니다.

apiVersion: v1
data:
  password: MTIzNA==
  user: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: ...
  name: literal-token
  namespace: default
  resourceVersion: "2012831"
  selfLink: /api/v1/namespaces/default/secrets/literal-token
  uid: ...
type: Opaque

위 출력에서 passworduser는 base64로 인코딩됩니다. base64 인코딩은 특정 문자를 처리할 수 없는 앱 및 서비스에서 정보를 사용할 수 있도록 만듭니다. base64 인코딩은 보안을 제공하지 않습니다.

보안 비밀 사용

작업 부하에 보안 비밀을 사용하기 위해서는 보안 비밀의 값을 참조하거나 보안 비밀이 포함된 볼륨을 마운트하는 환경 변수를 지정할 수 있습니다.

보안 비밀 사용에 대해 자세히 알아보려면 보안 비밀 사용을 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine