Encrypting Confidential Data at Rest

Yu Sang Minยท2025๋…„ 6์›” 9์ผ

CKA

๋ชฉ๋ก ๋ณด๊ธฐ
35/110
post-thumbnail

๐Ÿ’ฌ https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/

$ etcdctl
$ apt-get install etcd-client
ETCDCTL_API=3 etcdctl \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt   \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key  \
   get /registry/secrets/default/<secret-name>
   
/registry/secrets/default/my-secret
k8s


v1Secret

        my-secretdefault"*$c913a0db-d0ac-43fb-ac08-dc719304b7412aB
kubectl-createUpdatevFieldsV1:-
+{"f:data":{".":{},"f:Key1":{}},"f:type":{}}B
Key1
    supersecretOpaque"
  • hexdump๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์„๋•Œ (๊ฐ„ํ˜น ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์œผ๋กœ ๋ณด์ด์ง€ ์•Š์•„์„œ)
ETCDCTL_API=3 etcdctl \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt   \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key  \
   get /registry/secrets/default/<secret-name> | hexdump -C
   
00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 6d 79 2d 73 65 63  |s/default/my-sec|
00000020  72 65 74 0a 6b 38 73 00  0a 0c 0a 02 76 31 12 06  |ret.k8s.....v1..|
00000030  53 65 63 72 65 74 12 d0  01 0a b0 01 0a 09 6d 79  |Secret........my|
00000040  2d 73 65 63 72 65 74 12  00 1a 07 64 65 66 61 75  |-secret....defau|
00000050  6c 74 22 00 2a 24 63 39  31 33 61 30 64 62 2d 64  |lt".*$c913a0db-d|
00000060  30 61 63 2d 34 33 66 62  2d 61 63 30 38 2d 64 63  |0ac-43fb-ac08-dc|
00000070  37 31 39 33 30 34 62 37  34 31 32 00 38 00 42 08  |719304b7412.8.B.|
00000080  08 8d 93 9b c2 06 10 00  8a 01 61 0a 0e 6b 75 62  |..........a..kub|
00000090  65 63 74 6c 2d 63 72 65  61 74 65 12 06 55 70 64  |ectl-create..Upd|
000000a0  61 74 65 1a 02 76 31 22  08 08 8d 93 9b c2 06 10  |ate..v1"........|
000000b0  00 32 08 46 69 65 6c 64  73 56 31 3a 2d 0a 2b 7b  |.2.FieldsV1:-.+{|
000000c0  22 66 3a 64 61 74 61 22  3a 7b 22 2e 22 3a 7b 7d  |"f:data":{".":{}|
000000d0  2c 22 66 3a 4b 65 79 31  22 3a 7b 7d 7d 2c 22 66  |,"f:Key1":{}},"f|
000000e0  3a 74 79 70 65 22 3a 7b  7d 7d 42 00 12 13 0a 04  |:type":{}}B.....|
000000f0  4b 65 79 31 12 0b 73 75  70 65 72 73 65 63 72 65  |Key1..supersecre|
00000100  74 1a 06 4f 70 61 71 75  65 1a 00 22 00 0a        |t..Opaque.."..|
0000010e
  • ์œ„์— ๋ณด์ด๋Š” ์ด๊ฒƒ์ด etcd์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ
  • ์ž์„ธํžˆ ๋ณด๋ฉด secret์ด๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋“  ๋ณด์ธ๋‹ค.
  • ์ €์žฅํ•œ ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ๋ฐ์ดํ„ฐ๋Š” ์•”ํ˜ธํ™” ๋˜์ง€ ์•Š์€ ํ˜•์‹์œผ๋กœ etcd์— ์ €์žฅ๋œ๋‹ค.
  • etcd์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ secret์œผ๋กœ ์ €์žฅ๋œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ ๋ณด์•ˆ์ทจ์•ฝ์ ์ด ๋œ๋‹ค.

๐Ÿ” ์ด๋ฏธ ์•”ํ˜ธํ™”๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ ํ•˜๊ธฐ

$ ps -aux | grep kube-api | grep "encryption-provider-config"

$ vi /etc/kubernetes/manifests/kube-apiserver.yaml

<์ค‘๋žต>
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=172.30.1.2
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://127.0.0.1:2379
    - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kube
    - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-clie
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostnam
    - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client
    - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.
    - --requestheader-allowed-names=front-proxy-client
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --secure-port=6443
    - --service-account-issuer=https://kubernetes.default.svc.cluster
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
  • ps -aux ... ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๋”ฐ๋ผ์„œ ์ด ์˜ต์…˜์€ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์Œ.

๐Ÿ‘‰๐Ÿป ๊ตฌ์„ฑํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์˜ต์…˜์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:    // ์ด ๋ถ€๋ถ„์—์„œ ์•”ํ˜ธํ™”ํ•  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณจ๋ผ์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
      - secrets
      - configmaps
      - pandas.awesome.bears.example # a custom resource API
    providers:    // providers๋Š” ๋ฐฐ์—ด์ด๋‹ค
      # This configuration does not provide data confidentiality. The first
      # configured provider is specifying the "identity" mechanism, which
      # stores resources as plain text.
      #
      - identity: {} # plain text, in other words NO encryption // ID์— ์–ด๋–ค ๊ฐ’๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์•”ํ˜ธํ™” ๋˜์ง€ ์•Š๋Š”๋‹ค
      - aesgcm:     // ๋‹ค์–‘ํ•œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
          keys:
            - name: key1
              secret: c2VjcmV0IGlzIHNlY3VyZQ==
            - name: key2
              secret: dGhpcyBpcyBwYXNzd29yZA==
      - aescbc:
          keys:
            - name: key1
              secret: c2VjcmV0IGlzIHNlY3VyZQ==
            - name: key2
              secret: dGhpcyBpcyBwYXNzd29yZA==
      - secretbox:
          keys:
            - name: key1
              secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
  - resources:
      - events
    providers:
      - identity: {} # do not encrypt Events even though *.* is specified below 
  - resources:
      - '*.apps' # wildcard match requires Kubernetes 1.27 or later
    providers:
      - aescbc:
          keys:
          - name: key2
            secret: c2VjcmV0IGlzIHNlY3VyZSwgb3IgaXMgaXQ/Cg==
  - resources:
      - '*.*' # wildcard match requires Kubernetes 1.27 or later
    providers:
      - aescbc:
          keys:
          - name: key3
            secret: c2VjcmV0IGlzIHNlY3VyZSwgSSB0aGluaw==
  • identify ํ•„๋“œ๊ฐ€ ๋งจ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งจ ์œ„์— ์žˆ์–ด์•ผ etcd์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™” ํ•œ๋‹ค.
# ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
      - configmaps
      - pandas.awesome.bears.example
    providers:
      - aescbc:
          keys:
            - name: key1
              # See the following text for more details about the secret value
              secret: <BASE 64 ENCODED SECRET>
      - identity: {} # this fallback allows reading unencrypted secrets;
                     # for example, during initial migration
  • ๋ชจ๋“  secret์„ ์•”ํ˜ธํ™”ํ•˜๋„๋ก ์ง€์ •ํ•˜๊ณ  aescbc ์•Œ๊ณ ๋ฆฌ์ฆ˜ provider๋ฅผ ์‚ฌ์šฉ
$ head -c 32 /dev/urandom | base64
  • ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 32๋ฐ”์ดํŠธ ๋ฌด์ž‘์œ„ ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒ์„ฑ๋œ ํ‚ค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด secret ํ•„๋“œ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•œ๋‹ค.
# vi enc.yaml

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
      - configmaps
      - pandas.awesome.bears.example
    providers:
      - aescbc:
          keys:
            - name: key1
              # See the following text for more details about the sec
              secret: wxzGkxm0kXEvvsrZbgb7dE61/wT9XBAu4M4KN1wcRKU=
      - identity: {} # this fallback allows reading unencrypted secre
                     # for example, during initial migration
  • ์•”ํ˜ธํ™” ๊ตฌ์„ฑํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์˜€๋‹ค.
  • ์ด ํŒŒ์ผ์„ kube-apiserver์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค
  • ๋‚ด๋ถ€์— ๋งˆ์šดํŠธ๋ฅผ ํ•ด์•ผํ•˜๋ฏ€๋กœ ๋ณผ๋ฅจ๊ณผ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉ
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 10.20.30.40:443
  creationTimestamp: null
  labels:
    app.kubernetes.io/component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    ...
    - --encryption-provider-config=/etc/kubernetes/enc/enc.yaml  # add this line
    volumeMounts:
    ...
    - name: enc                           # add this line
      mountPath: /etc/kubernetes/enc      # add this line, pod ๋‚ด ๋งคํ•‘๋  ๊ฒฝ๋กœ
      readOnly: true                      # add this line
    ...
  volumes:
  ...
  - name: enc                             # add this line
    hostPath:                             # add this line
      path: /etc/kubernetes/enc           # add this line, ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ
      type: DirectoryOrCreate             # add this line
  • ๋„์–ด์“ฐ๊ธฐ๋‚˜ ์ฃผ์„ ์ฃผ์˜ํ• ๊ฒƒ, ์ธ์‹๋˜๋ฉด kube-apiserver ์ƒ์„ฑ ์ž˜ ์•ˆ๋จ

๐Ÿ“ ์ƒˆ๋กœ์šด secret ๋งŒ๋“ค๊ธฐ

$ kubectl create secret generic 
$ kubectl create secret generic my-secret2 --from-literal=key2=topsecret
secret/my-secret2 created
$ k get secret
NAME         TYPE     DATA   AGE
my-secret    Opaque   1      40m
my-secret2   Opaque   1      23s

ETCDCTL_API=3 etcdctl \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt   \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key  \
   get /registry/secrets/default/my-secret2 | hexdump -C

00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 6d 79 2d 73 65 63  |s/default/my-sec|
00000020  72 65 74 32 0a 6b 38 73  3a 65 6e 63 3a 61 65 73  |ret2.k8s:enc:aes|
00000030  63 62 63 3a 76 31 3a 6b  65 79 31 3a 91 b9 98 fc  |cbc:v1:key1:....|
00000040  a0 89 dc 05 9c c9 3c 74  7b 86 a2 b6 17 6f 08 25  |......<t{....o.%|
00000050  cc d2 67 b6 92 bc e5 a4  d1 bc 8a 1c aa 67 91 b4  |..g..........g..|
00000060  d3 1f a2 13 a2 69 68 da  6f 29 8d 15 a4 2d 0c f7  |.....ih.o)...-..|
00000070  81 aa 8c e4 67 4f ec 59  86 01 a9 d6 26 00 51 6f  |....gO.Y....&.Qo|
00000080  ab e7 9c 52 50 a3 69 ec  1d 0f b6 ca ae 15 7e 69  |...RP.i.......~i|
00000090  07 3b 93 4b bb 87 fd 8f  d2 c7 bd 56 1c 15 73 83  |.;.K.......V..s.|
000000a0  c1 71 35 a2 79 73 a5 0c  c4 0f b1 fd d5 e2 1c c4  |.q5.ys..........|
000000b0  6f e5 b3 c8 c9 ed 68 38  f8 61 ea cf 5b 70 35 d6  |o.....h8.a..[p5.|
000000c0  61 4a 98 a8 fe b6 bb f8  c6 54 07 db 72 c0 89 be  |aJ.......T..r...|
000000d0  ff 14 df 15 7f 76 10 e7  d3 ec 82 f7 03 53 e7 24  |.....v.......S.$|
000000e0  e5 12 85 81 9f dd 97 ed  92 a5 47 25 c3 9a 43 0b  |..........G%..C.|
000000f0  f3 be f6 d3 ed 3a 93 26  eb c6 f5 b9 73 9e 21 15  |.....:.&....s.!.|
00000100  19 f9 4e f5 bb 7c fd af  b7 b9 64 74 e0 19 c2 38  |..N..|....dt...8|
00000110  67 9d ec d7 45 61 bd 7b  60 8e 74 78 69 e7 4d dd  |g...Ea.{`.txi.M.|
00000120  42 99 95 05 b6 34 ae b7  4e 09 9f 11 91 70 2f bb  |B....4..N....p/.|
00000130  6e 19 e6 ed 47 e2 6e 74  d1 2d 78 84 0a           |n...G.nt.-x..|
0000013d
  • my-sceret2๋Š” ์•”ํ˜ธํ™” ๋˜์–ด์žˆ๋‹ค
  • my-secret์€ ํ‰๋ฌธ์œผ๋กœ ๋˜์–ด์žˆ๋‹ค
  • encryption์ด ํ™œ์„ฑํ™” ๋œ ์ดํ›„ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“œ๋Š” ํ•ญ๋ชฉ๋งŒ ์•”ํ˜ธํ™”๋˜๊ธฐ ๋•Œ๋ฌธ

โ™ป๏ธ ๊ธฐ์กด์— ์ƒ์„ฑ๋œ ํ‰๋ฌธ secret ์ „์ฒด ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•

$ kubectl get secrets --all-namespaces -o json | kubectl replace -f -
secret/my-secret replaced
secret/my-secret2 replaced

$ ETCDCTL_API=3 etcdctl \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt   \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key  \
   get /registry/secrets/default/my-secret | hexdump -C
   
   00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 6d 79 2d 73 65 63  |s/default/my-sec|
00000020  72 65 74 32 0a 6b 38 73  3a 65 6e 63 3a 61 65 73  |ret2.k8s:enc:aes|
00000030  63 62 63 3a 76 31 3a 6b  65 79 31 3a 91 b9 98 fc  |cbc:v1:key1:....|
00000040  a0 89 dc 05 9c c9 3c 74  7b 86 a2 b6 17 6f 08 25  |......<t{....o.%|
00000050  cc d2 67 b6 92 bc e5 a4  d1 bc 8a 1c aa 67 91 b4  |..g..........g..|
00000060  d3 1f a2 13 a2 69 68 da  6f 29 8d 15 a4 2d 0c f7  |.....ih.o)...-..|
00000070  81 aa 8c e4 67 4f ec 59  86 01 a9 d6 26 00 51 6f  |....gO.Y....&.Qo|
00000080  ab e7 9c 52 50 a3 69 ec  1d 0f b6 ca ae 15 7e 69  |...RP.i.......~i|
00000090  07 3b 93 4b bb 87 fd 8f  d2 c7 bd 56 1c 15 73 83  |.;.K.......V..s.|
000000a0  c1 71 35 a2 79 73 a5 0c  c4 0f b1 fd d5 e2 1c c4  |.q5.ys..........|
000000b0  6f e5 b3 c8 c9 ed 68 38  f8 61 ea cf 5b 70 35 d6  |o.....h8.a..[p5.|
000000c0  61 4a 98 a8 fe b6 bb f8  c6 54 07 db 72 c0 89 be  |aJ.......T..r...|
000000d0  ff 14 df 15 7f 76 10 e7  d3 ec 82 f7 03 53 e7 24  |.....v.......S.$|
000000e0  e5 12 85 81 9f dd 97 ed  92 a5 47 25 c3 9a 43 0b  |..........G%..C.|
000000f0  f3 be f6 d3 ed 3a 93 26  eb c6 f5 b9 73 9e 21 15  |.....:.&....s.!.|
00000100  19 f9 4e f5 bb 7c fd af  b7 b9 64 74 e0 19 c2 38  |..N..|....dt...8|
00000110  67 9d ec d7 45 61 bd 7b  60 8e 74 78 69 e7 4d dd  |g...Ea.{`.txi.M.|
00000120  42 99 95 05 b6 34 ae b7  4e 09 9f 11 91 70 2f bb  |B....4..N....p/.|
00000130  6e 19 e6 ed 47 e2 6e 74  d1 2d 78 84 0a           |n...G.nt.-x..|
0000013d
controlplane:/etc/kubernetes/manifests$ kubectl get secrets --all-namespaces -o json | kubectl replace -f -
secret/my-secret replaced
secret/my-secret2 replaced

$ ETCDCTL_API=3 etcdctl \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt   \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key  \
   get /registry/secrets/default/my-secret | hexdump -C
00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 6d 79 2d 73 65 63  |s/default/my-sec|
00000020  72 65 74 0a 6b 38 73 3a  65 6e 63 3a 61 65 73 63  |ret.k8s:enc:aesc|
00000030  62 63 3a 76 31 3a 6b 65  79 31 3a 9b 89 f8 11 13  |bc:v1:key1:.....|
00000040  65 bd 8b 72 ac f4 bc 28  ad b3 26 99 09 af 11 e2  |e..r...(..&.....|
00000050  2a 84 c3 c3 0e e7 de f6  d4 46 80 02 ae ee 3d c3  |*........F....=.|
00000060  22 38 5d cc 64 c5 96 75  d9 5c d3 85 5c b1 7d 03  |"8].d..u.\..\.}.|
00000070  62 d3 67 f1 b2 6e f5 dd  1e d2 5d 24 29 2a 17 78  |b.g..n....]$)*.x|
00000080  5e 60 2c 59 82 da 8a d2  9a fd b5 7e 58 7d 07 fc  |^`,Y.......~X}..|
00000090  30 2a 01 39 fa ec f5 db  94 77 03 da 9f 81 03 d1  |0*.9.....w......|
000000a0  8e af 54 3d 59 55 f6 48  ff af b2 f5 d5 ff f9 4a  |..T=YU.H.......J|
000000b0  65 a2 8b ed a2 df d7 54  79 cc b9 a1 db 30 cf ee  |e......Ty....0..|
000000c0  7e a0 c4 2d 86 d8 6d 32  5b 50 cd 03 10 56 fc 9f  |~..-..m2[P...V..|
000000d0  47 8b 31 db 3d a5 e4 e8  d8 29 3e 07 a4 7e bc d5  |G.1.=....)>..~..|
000000e0  99 a1 39 14 f1 ea d0 81  7f da 09 f6 aa 4f 8c 81  |..9..........O..|
000000f0  09 07 f3 f2 1e f5 ef 13  e5 37 aa de 1d a1 71 90  |.........7....q.|
00000100  28 0e 56 10 32 8a 03 13  9d af 6c e6 a6 33 2a fe  |(.V.2.....l..3*.|
00000110  ca 31 df 80 37 6d 64 ee  1f f1 8b ac 5c 48 68 ba  |.1..7md.....\Hh.|
00000120  27 d8 42 96 36 fb 79 fc  82 6a a5 4a c6 34 0c 6e  |'.B.6.y..j.J.4.n|
00000130  c3 3b 4d 88 ed c5 2a b5  27 4b d8 0a              |.;M...*.'K..|
0000013c
  • my-secret์„ ์กฐํšŒํ•ด๋ด๋„ ํ‰๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0๊ฐœ์˜ ๋Œ“๊ธ€