본문 바로가기
Kubernetes

secret

by Nirah 2023. 1. 4.

 

 

https://kubernetes.io/ko/docs/concepts/configuration/secret/

 

시크릿(Secret)

시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트이다. 이를 사용하지 않으면 중요한 정보가 파드 명세나 컨테이너 이미지에 포함될 수 있다. 시크릿을 사용한다

kubernetes.io

 

secret

시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트이다.

시크릿을 사용한다는 것은 사용자의 기밀 데이터를 애플리케이션 코드에 넣을 필요가 없음을 뜻한다.

시크릿은 시크릿을 사용하는 파드와 독립적으로 생성될 수 있기 때문에, 파드를 생성하고, 확인하고, 수정하는 워크플로우 동안 시크릿(그리고 데이터)이 노출되는 것에 대한 위험을 경감시킬 수 있다.

시크릿은 컨피그맵과 유사하지만 특별히 기밀 데이터를 보관하기 위한 것이다.

 

 

주의

쿠버네티스 시크릿은 기본적으로 API 서버의 기본 데이터 저장소(etcd)에 암호화되지 않은 상태로 저장된다.

API 접근(access) 권한이 있거나 etcd에 접근할 수 있는 모든 사용자는 시크릿을 조회하거나 수정할 수 있다.

또한 네임스페이스에서 파드를 생성할 권한이 있는 사람은 해당 네임스페이스의 모든 시크릿을 읽을 수 있다.

여기에는 디플로이먼트 생성 기능과 같은 간접 접근이 포함된다.

 

 

사용법

파드가 시크릿을 사용하는 주요한 방법으로 다음의 세 가지가 있다.

  • 하나 이상의 컨테이너에 마운트된 볼륨 내의 파일로써 사용.
  • 컨테이너 환경 변수로써 사용.
  • 파드의 이미지를 가져올 때 kubelet에 의해 사용.

 

 

환경변수로 암호화 하기

예를 들어 mysql의 root 로그인 비밀번호가 dkagh1. 일때, 이를 해시로 암호화해보자.

echo -n 'dkagh1.' | base64

 

'root'라는 단어도 해시값으로 암호화해서 설령 시크릿파일을 보더라도 어떤 username을 설정하는건지 모르게 한다.

echo -n 'root' | base64

 

mkdir /secret

cd /secret/

 

이런식으로 아까 만든 해시값을 써서 시크릿 yaml을 만든다.

해시값을 썼기 때문에 보안성이 향상된다.

이름은 my-secret 으로 만들어주자.

 

cat > secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: cm9vdA==
  password: ZGthZ2gxLg==

 

nginx를 실행하는 포드 yaml을 만든다.

방금 만든 'my-secret' 파일을 참조해서 username과 passwd를 환경변수로 가져와 지정해주는 내용을 넣는다.

cat << EOF > reg_secret_env.yaml

apiVersion: v1
kind: Pod
metadata:
  name: web-apl
spec:
  containers:
  - name: nginx
    image: nginx
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password
EOF

 

k create -f secret.yaml

k create -f reg_secret_env.yaml

 

다음과 같이 해시태그로 넣은 설정이 평문으로 바뀌어 적용돼있다.

k exec web-apl -it -- /bin/bash

echo $DB_USERNAME

echo $DB_PASSWORD

 

'Kubernetes' 카테고리의 다른 글

[미니프로젝트] - metal LB 사용하여 WordPress와 MySQL을 퍼시스턴트 볼륨에 배포 (with 시크릿)  (1) 2023.01.04
ingress  (0) 2023.01.04
ConfigMap (환경변수)  (0) 2023.01.04
워크로드  (0) 2023.01.03
Networkpolicy  (0) 2023.01.02