비밀번호 정책을 사용하여 기본 제공 인증 관리

문서 버전을 선택합니다.

이 페이지에서는 AlloyDB Omni의 비밀번호 정책을 설정하고 관리하는 방법을 설명합니다.

비밀번호 정책 정보

애플리케이션의 데이터베이스 사용자가 기본 제공 비밀번호 기반 메서드를 사용하여 AlloyDB Omni로 인증하는 경우 안전한 비밀번호를 적용하여 인증을 더 안전하게 만들 수 있습니다. AlloyDB Omni 비밀번호 정책을 설정하여 비밀번호 적용을 정의하고 사용 설정할 수 있습니다.

비밀번호 정책의 제한사항

AlloyDB Omni 비밀번호 정책에는 다음과 같은 제한사항이 있습니다.

  • 비밀번호 정책은 정책을 설정한 후에 생성된 비밀번호에만 적용됩니다. 기존 사용자 비밀번호는 비밀번호 정책 변경의 영향을 받지 않습니다.

  • 비밀번호 정책은 일반 텍스트로만 입력된 비밀번호에 적용됩니다. 암호화된 문자열로 입력된 비밀번호에는 비밀번호 정책이 적용되지 않습니다.

AlloyDB Omni 비밀번호 정책 설정

postgresql.conf 구성 파일에서 GUC(Grand Unified Configuration) 비밀번호 파라미터를 업데이트하여 비밀번호 정책을 설정합니다. GUC 파라미터를 설정하는 방법을 알아보려면 AlloyDB Omni 데이터베이스 플래그 구성을 참조하세요.

AlloyDB Omni의 비밀번호 정책에는 다음 옵션이 포함될 수 있습니다.

  • 사용자 이름 사용 금지: 비밀번호에서 사용자 이름을 사용하지 못하게 합니다.

  • 비밀번호 복잡성: 비밀번호에 허용된 글자 수의 소문자, 대문자, 숫자, 영숫자가 아닌 문자가 포함되어 있는지 확인합니다. 비밀번호 길이가 유효한지도 확인합니다.

  • 비밀번호 만료: 비밀번호가 정기적으로 순환되는지 확인합니다.

AlloyDB Omni에서 지원하는 비밀번호 정책 플래그 목록은 비밀번호 정책 플래그를 참조하세요.

보안 표준을 준수하고 보안 권장 도구의 안내를 따르려면 기본 시행 플래그를 ON로 구성하여 세 가지 옵션을 모두 사용 설정해야 합니다.

  • password.enforce_password_does_not_contain_username
  • password.enforce_complexity
  • password.enforce_expiration

이러한 세 가지 플래그 중 하나를 OFF로 설정하거나 생략하면 보안 추천 도구에서 인스턴스에 비밀번호 정책이 사용 설정되어 있지 않다고 표시합니다.

비밀번호 유효성 검사 라이브러리 미리 로드

AlloyDB Omni에서 비밀번호 정책이 적용되려면 alloydb_password_validation 라이브러리를 로드해야 합니다. 이 라이브러리를 로드하려면 다음을 수행합니다.

  1. AlloyDB Omni 설치의 postgresql.conf 구성 파일을 찾아 텍스트 편집기에서 엽니다.

  2. shared_preload_libraries 줄을 찾아 alloydb_password_validation이 포함되어 있는지 확인합니다. 그렇지 않으면 추가해야 합니다. 완료되면 shared_preload_libraries 줄이 다음과 같이 표시됩니다.

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

비밀번호 복잡성 적용

비밀번호 복잡성 정책을 적용하려면 다음 단계를 따르세요.

  1. postgresql.conf 파일이 비밀번호 검증 라이브러리를 미리 로드하는지 확인합니다.

  2. password.enforce_complexity 플래그를 ON으로 설정합니다.

  3. 비밀번호 정책 플래그를 사용하여 비밀번호 정책을 정의합니다.

예를 들어 비밀번호에 대문자 1개 이상, 숫자 1개 이상이 포함되어야 하고 길이가 10자 이상이어야 한다는 비밀번호 정책을 적용하려면 postgresql.conf 파일에 다음을 설정합니다.

  • password.enforce_complexity = ON
  • password.min_uppercase_letters = 1
  • password.min_numerical_chars = 1
  • password.min_pass_length = 10

이러한 플래그가 설정된 후 이 비밀번호 정책을 준수하지 않는 데이터베이스 사용자 비밀번호를 설정하려고 하면 실패합니다. 예를 들어 이 정책이 설정된 경우 비밀번호 foo는 10자 미만이고 숫자나 대문자를 포함하지 않으므로 다음 psql 클라이언트 명령어가 실패합니다.

CREATE USER USERNAME WITH PASSWORD foo;

비밀번호 만료 시행

비밀번호 만료 정책을 시행하려면 다음 단계를 따르세요.

  1. postgresql.conf 파일이 비밀번호 검증 라이브러리를 미리 로드하는지 확인합니다.

  2. password.enforce_expiration 플래그를 ON으로 설정합니다.

  3. password.expiration_in_days 플래그를 비밀번호가 설정된 후 만료되는 일수로 설정합니다.

  4. password.notify_expiration_in_days 플래그를 비밀번호가 만료되기 전 사용자가 비밀번호 만료 알림을 받기 시작하는 일수로 설정합니다.

예를 들어 비밀번호가 30일 후에 만료되고 비밀번호가 만료되기 15일 전에 사용자에게 알림이 전송되는 비밀번호 정책을 시행하려면 postgresql.conf 파일에서 다음을 설정해야 합니다.

  • password.enforce_expiration = ON
  • password.expiration_in_days = 30
  • password.notify_expiration_in_days = 15

사용자의 비밀번호가 만료되면 해당 사용자는 AlloyDB Omni에 연결할 수 없습니다. 사용자의 비밀번호를 재설정하려면 다음 단계를 따르세요.

  1. psql을 사용하여 AlloyDB Omni에 연결합니다. 예를 들어 Docker를 사용하여 AlloyDB Omni를 설치한 경우 다음 명령어를 실행합니다.

    sh docker exec -it CONTAINER-NAME psql -h localhost -U postgres

  2. postgres=# 프롬프트에서 다음 명령어를 실행합니다.

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

사용자 비밀번호 변경에 대한 자세한 내용은 PostgreSQL 문서의 ALTER ROLE을 참조하세요.

내부 관리자 계정에 비밀번호 기반 인증 적용

관리자 계정의 비밀번호 시행은 일반적으로 Vault와 같은 외부 도구를 사용하여 중요한 시스템 비밀번호의 보안 순환 및 업데이트를 자동화하고 중앙 집중화합니다. 이 기능을 사용하면 AlloyDB Omni가 다양한 내부 프로세스를 관리하는 데 사용하는 중요한 관리자 계정에 비밀번호 기반 인증을 적용하여 제로 트러스트 정책을 준수할 수 있습니다.

비밀번호 시행은 다음 데이터베이스 계정에서 지원됩니다.

  • alloydbadmin: Kubernetes (K8s) 컨트롤러의 슈퍼 사용자 계정입니다.
  • alloydbmonitor: 데이터베이스 측정항목을 수집하는 읽기 전용 계정입니다.

강제 적용을 사용 설정하려면 이러한 계정의 비밀번호를 저장하는 Kubernetes 보안 비밀 객체를 참조하도록 데이터베이스 클러스터 사양을 구성합니다. 이 프로세스는 보안을 강화하고 데이터베이스의 내부 관리 계정 사용자 인증 정보를 관리하는 데 필요한 수동 오버헤드를 줄입니다.

비밀번호 시행 사용 설정

클러스터를 만들 때 비밀번호 적용을 사용 설정하려면 다음 단계를 따르세요.

  1. AlloyDB Omni Kubernetes 연산자 1.7.0 이상을 실행하는 Kubernetes 클러스터가 있어야 합니다.
  2. DBCluster 사양에 systemUserPasswordRefs 속성을 추가합니다. 이 속성에는 각 내부 시스템 계정 이름(예: alloydbadminalloydbmonitor)을 해당 Kubernetes 보안 비밀 객체 이름에 연결하는 키-값 쌍이 포함되어야 합니다.
  3. 데이터베이스를 만들기 전에 참조된 Kubernetes 보안 비밀에 사용자의 시드 비밀번호가 포함되어 있고 속성 형식이 다음 구조를 따르는지 확인하세요.

    systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
    

비밀번호 순환을 안전하게 관리하기

강제 적용을 사용 설정한 후에는 Vault와 같은 외부 도구를 사용하여 지속적인 비밀번호 순환을 안전하게 관리하세요.

  1. 데이터베이스 비밀번호를 업데이트합니다. 외부 도구는 AlloyDB Omni에서 시스템 계정의 비밀번호를 직접 업데이트합니다.
  2. Kubernetes 보안 비밀을 업데이트합니다. 그러면 외부 도구가 연결된 Kubernetes 보안 비밀 객체를 새 비밀번호로 업데이트합니다.

    • 보안 비밀 객체의 콘텐츠는 키가 데이터베이스 이름이고 값이 base64로 인코딩된 새 비밀번호인 키-값 쌍이어야 합니다.
    • 보안 비밀 이름에는 다음 규칙을 사용하는 것이 좋습니다.

      USER_NAME-pw-DATABASE_NAME
      

    AlloyDB Omni 연산자는 Kubernetes 보안 비밀의 변경사항을 감지하고 데이터베이스 포드에서 실행되는 데이터베이스 에이전트에서 사용하는 비밀번호 캐시를 자동으로 업데이트합니다. 그러면 에이전트가 향후 모든 데이터베이스 작업에 이 새로운 캐시된 비밀번호를 사용합니다.

특정 사용자의 비밀번호 시행 사용 중지

특정 시스템 계정에 대한 비밀번호 시행을 사용 중지하려면 DBCluster 사양의 systemUserPasswordRefs 목록에서 해당 사용자를 삭제해야 합니다.

  1. 사용자를 삭제합니다. DBCluster 사양에서 비밀번호 적용에서 제외할 사용자에 해당하는 키-값 쌍을 삭제합니다. 예를 들어 alloydbadmin에서 사용 중지하는 경우 alloydbadmin: alloydbadmin-pw-dbcluster-sample을 삭제합니다.
  2. kubectl apply를 사용하여 수정된 DBCluster 사양을 적용합니다.

    업데이트된 사양을 적용하면 해당 사용자의 비밀번호 강제 적용이 사용 중지됩니다.

비밀번호에 사용자 이름 허용 안함

비밀번호에 사용자 이름이 포함되지 않도록 하는 정책을 시행하려면 다음 단계를 따르세요.

  1. postgresql.conf 파일이 비밀번호 검증 라이브러리를 미리 로드하는지 확인합니다.

  2. password.enforce_password_does_not_contain_usernameON으로 설정합니다.

예를 들어 비밀번호에 사용자 이름이 하위 문자열로 포함되지 않도록 하려면 postgresql.conf 파일에 다음을 설정합니다.

  • password.enforce_password_does_not_contain_username = ON

이 플래그가 설정된 경우 비밀번호 alex-secret에 사용자 이름 alex가 포함되어 있으므로 다음 작업이 실패합니다.

CREATE USER alex WITH PASSWORD 'alex-secret';

다음 단계