보안 비밀을 사용하여 민감한 정보 저장


보안 비밀을 사용하여 비밀번호 및 액세스 키와 같은 민감한 구성 정보를 GKE 클러스터에 저장할 수 있습니다. 이 페이지에서는 Google Cloud 리소스를 구성할 때 구성 커넥터가 보안 비밀 값을 사용하는 방법에 대해 설명합니다.

개요

이 섹션에서는 구성 커넥터에서 보안 비밀을 사용하는 방법에 대한 개요를 제공합니다.

리소스를 만들 때 보안 비밀 사용

리소스를 만들 때 보안 비밀 내의 데이터를 사용할 수 있습니다. 보안 비밀을 리소스에 전달에서 비밀번호가 포함된 보안 비밀을 만든 후 Cloud SQL 데이터베이스에서 사용자의 보안 비밀을 참조합니다.

보안 비밀 업데이트

보안 비밀에 업데이트를 적용하면 구성 커넥터는 다음에 원하는 상태를 조정할 때 리소스를 업데이트합니다. 예를 들어, SQLUser의 비밀번호로 참조되는 보안 비밀을 업데이트하면 구성 커넥터가 사용자의 비밀번호를 업데이트합니다.

보안 비밀 삭제

리소스에서 사용하는 보안 비밀을 삭제해도 구성 커넥터는 보안 비밀에 대한 리소스의 참조를 삭제하지 않습니다. 예를 들어 보안 비밀을 참조하는 비밀번호로 SQLUser를 만들고 보안 비밀을 삭제하여도 비밀번호는 SQLUser에 남아 있습니다.

문제해결

존재하지 않는 보안 비밀을 참조하는 리소스를 만들면 구성 커넥터가 DependencyNotFound 또는 DependencyInvalid 이벤트를 생성합니다.

보안 비밀 및 Kubernetes 네임스페이스

Kubernetes는 네임스페이스 전체의 보안 비밀에 대한 액세스를 허용하지 않으므로 서로 다른 네임스페이스의 리소스에 동일한 보안 비밀 값을 사용하는 경우 모든 네임스페이스에 보안 비밀을 적용해야 합니다.

보안 비밀을 리소스에 전달

이 섹션에서는 Cloud SQL 서버를 생성하고 기본 사용자 비밀번호를 보안 비밀로 설정합니다.

시작하기 전에

이 단계를 완료하려면 다음이 필요합니다.

  • Kubernetes 클러스터에 설치된 구성 커넥터
  • 프로젝트에서 사용 설정된 Cloud SQL Admin API가 사용 설정되었는지 확인하려면 다음 gcloud 명령어를 실행합니다.

    gcloud services list --filter=sqladmin.googleapis.com
    

    명령어에 Listed 0 items.가 표시되면 API를 사용 설정해야 합니다. 구성 커넥터와 Resource Manager API 또는 gcloud 명령어로 API를 사용 설정할 수 있습니다.

Service Usage API

  1. 구성 커넥터는 Service Usage API를 사용하여 서비스 API를 사용 설정합니다. 이 단계를 수행하려면 서비스 사용량 API를 사용 설정해야 합니다. Google Cloud CLI를 사용하여 이 API를 사용 설정할 수 있습니다.
    gcloud services enable serviceusage.googleapis.com
  2. 다음 YAML을 enable-sql.yaml 파일에 복사합니다.

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. kubectl을 사용하여 클러스터에 enable-sql.yaml을 적용합니다.

    kubectl apply -f enable-sql.yaml --namespace CC_NAMESPACE
    

    CC_NAMESPACE를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.

gcloud

Google Cloud CLI로 SQL Admin API를 사용 설정하려면 다음 명령어를 실행합니다.

gcloud services enable sqladmin.googleapis.com

Cloud SQL 서버 만들기

  1. 아래 YAML을 sql-server-example.yaml 파일에 복사합니다. sqlserver-1이라는 Cloud SQL 서버와 sqluser-sample이라는 사용자가 생성됩니다. sqluser-sample의 비밀번호는 리소스 참조에 의해 secret-1이라는 보안 비밀로 설정됩니다.

    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLInstance
    metadata:
      labels:
        label-one: "sql-server-example"
      name: sqlserver-1
    spec:
      region: us-central1
      databaseVersion: MYSQL_5_7
      settings:
        tier: db-g1-small
    ---
    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLUser
    metadata:
      name: sqluser-sample
    spec:
      instanceRef:
        name: sqlserver-1
      host: "%"
      password:
        valueFrom:
          secretKeyRef:
            name: secret-1  # Name of the Secret object to extract a value from
            key: password   # Key that identifies the value to be extracted
    
  2. 아래 YAML을 example-secret.yaml이라는 파일에 복사합니다. 저장하기 전에 password의 값을 편집합니다. 그러면 이전 섹션에서 참조된 secret-1이 선언됩니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. 클러스터에 구성을 적용합니다.

    kubectl apply -n CC_NAMESPACE -f example-secret.yaml
    kubectl apply -n CC_NAMESPACE -f sql-server-example.yaml
    

    CC_NAMESPACE를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.

    구성 커넥터는 지정한 비밀번호로 Cloud SQL 인스턴스와 사용자를 생성합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

  4. 몇 분 정도 기다렸다가 인스턴스를 사용할 수 있는지를 확인하세요.

    gcloud sql instances list --filter="name=sqlserver-1"

    결과에는 STATUSRUNNABLE인 서버가 포함되어야 합니다.

  5. SQL 인스턴스에 연결할 수 있는지 확인하세요.

    gcloud sql connect sqlserver-1 --user=sqluser-sample

    비밀번호를 묻는 메시지가 표시됩니다.

삭제

인스턴스를 유지하지 않으려면 kubectl을 사용하여 Cloud SQL 인스턴스, 사용자 및 보안 비밀을 삭제하세요.

    kubectl delete -n CC_NAMESPACE -f sql-server-example.yaml
    kubectl delete -n CC_NAMESPACE -f example-secret.yaml

CC_NAMESPACE를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.

다음 단계