다음을 통해 공유


Azure Migrate 검색 및 평가에 대한 최소 권한 PostgreSQL 계정 만들기(미리 보기)

이 문서에서는 Azure Migrate에서 검색 및 평가에 필요한 최소 권한으로 사용자 지정 PostgreSQL 계정을 만드는 방법을 설명합니다.

검색을 시작하기 전에 PostgreSQL 인스턴스에 연결하도록 PostgreSQL 계정으로 Azure Migrate 어플라이언스를 구성합니다. 슈퍼 사용자 계정을 사용하지 않도록 하려면 검색 및 평가를 위해 메타데이터를 수집하는 데 필요한 권한만 있는 사용자 지정 계정을 만들 수 있습니다. PostgreSQL 검색 및 평가를 위한 어플라이언스 구성에 이 사용자 지정 계정을 추가합니다. 이 설명서에 제공된 최소 권한 계정 프로비저닝 유틸리티를 사용하여 설정을 간소화할 수 있습니다.

필수 조건

  • 실행 중이며 액세스할 수 있는 PostgreSQL 서버입니다.
  • PostgreSQL 인스턴스에 대한 슈퍼 사용자 액세스
  • Azure Migrate 프로젝트 설정

최소 필수 권한

Azure Migrate에서 보안 및 규정 준수를 보장하려면 필요한 권한만 있는 PostgreSQL 사용자를 만들어 무단 액세스 또는 의도하지 않은 변경의 위험을 최소화합니다.

Azure Migrate 요구 사항에 따라 필요한 최소 권한은 다음과 같습니다.

데이터베이스 수준 권한

  • CONNECT: 데이터베이스에 대한 액세스
  • pg_read_all_settings: 서버 구성 매개 변수 읽기
  • pg_read_all_stats: 데이터베이스 통계에 대한 액세스
  • pg_monitor: 데이터베이스 성능 메트릭 모니터링

SQL 스크립트 구현

다음 콘텐츠를 다음과 같이 CreateUser.sql저장합니다.

-- PostgreSQL Script to Create a Least-Privilege User for Azure Migrate
-- Usage: Replace :username and :password with actual values when executing.
-- Parameters:
--   :username - The username for the new user
--   :password - The password for the new user

-- Check if the user already exists
SELECT CASE
    WHEN EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username')
        THEN 'User ' || :'username' || ' already exists, skipping creation'
    ELSE
        'User ' || :'username' || ' does not exist, proceeding with creation'
END AS user_check;

-- Only proceed if user doesn't exist
SELECT NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username') AS should_create \gset
\if :should_create

BEGIN;

-- Create the user with minimal privileges
CREATE USER :"username" WITH PASSWORD :'password' LOGIN
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS;

-- Grant CONNECT privilege on all non-template databases
SELECT 'GRANT CONNECT ON DATABASE ' || quote_ident(datname) || ' TO ' || :'username' || ';'
FROM pg_database WHERE datistemplate = false; \gexec

-- Grant required monitoring and read permissions
GRANT pg_read_all_settings TO :"username";
GRANT pg_read_all_stats TO :"username";
GRANT pg_monitor TO :"username";

-- Log the user creation
SELECT 'Azure Migrate user ' || :'username' || ' created successfully with least privileges.' AS result;

COMMIT;

\endif

-- Usage instructions:
--   Replace :username and :password with actual values using psql variables:
--   psql -v username=myuser -v password=mypassword -f CreateUser.sql

비고

이 사용자에게는 Azure Migrate 검색 및 평가에 필요한 최소 권한만 있습니다.

  • 사용자는 데이터베이스, 역할을 만들거나 복제할 수 없습니다.
  • 항상 강력한 암호를 사용하고 조직의 보안 정책을 따릅니다.

사용 지침

제공된 SQL 스크립트를 사용하려면 다음 단계를 수행합니다.

  1. 스크립트를 .로 CreateUser.sql저장합니다.
  2. 변수를 사용하여 psql 사용자 이름 및 암호의 자리 표시자를 원하는 값으로 바꿉니다.

스크립트 실행

슈퍼 사용자 권한이 있는 PostgreSQL 명령줄 도구(psql)를 사용하여 스크립트를 실행합니다. 자리 표시자를 실제 값으로 바꿉다.

psql -h <hostname> -p <port> -d <database> -U <superuser> \
    -v username=<<Az Migrate username>> \
    -v password='your_secure_password' \
    -f CreateUser.sql

사용자 생성 확인

사용자가 만들어지고 올바른 권한이 할당되었는지 확인하려면 다음 쿼리를 실행합니다.

-- Check if the user exists and review key attributes
SELECT usename, usecreatedb, usesuper, userepl
FROM pg_catalog.pg_user
WHERE usename = '<<Az Migrate username>>';

false, usecreatedb, 그리고 usesuper에 대한 결과가 userepl(으)로 표시되어야 합니다.

부여된 역할 기반 권한 확인

다음 쿼리를 실행하여 사용자에게 필요한 모니터링 역할이 있는지 확인합니다. 이렇게 하면 계정에 Azure Migrate 작업에 필요한 권한만 있습니다.

-- Verify the user exists
SELECT rolname
FROM pg_roles
WHERE rolname = '<<Az Migrate username>>';
-- Check membership in monitoring roles
SELECT r.rolname AS granted_role
FROM pg_auth_members m
JOIN pg_roles r ON m.roleid = r.oid
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = '<<Az Migrate username>>');

이러한 쿼리를 실행한 후에는 사용자가 존재하며 Azure Migrate 검색 및 평가에 필요한 권한만 있는 것을 볼 수 있습니다.

고려 사항

Azure Migrate에만 최소 권한 PostgreSQL 계정을 사용하고, 정기적으로 권한을 검토하고, 자격 증명을 회전하고, 활동을 모니터링하고, 더 이상 필요하지 않은 경우 계정을 사용하지 않도록 설정합니다.

  • <<Az Migrate username>><PASSWORD>를 최소 권한 사용자를 위한 선택한 사용자 이름과 강력한 암호로 대체하십시오.
  • 사용자를 만들고 역할을 할당하려면 상승된 액세스 권한이 필요하므로 슈퍼 사용자 권한으로 스크립트를 실행합니다.
  • 스크립트를 실행하기 전에 PostgreSQL 인스턴스가 실행 중이고 액세스할 수 있는지 확인합니다.
  • 프로덕션 사용 전에 개발 또는 스테이징 환경에서 스크립트를 테스트합니다.
  • 암호 복잡성 및 관리에 대한 조직의 보안 모범 사례를 따릅니다.
  • 스크립트 실행 후 부여된 권한을 검토하여 보안 요구 사항을 충족하는지 확인합니다.
  • 문제가 발생하는 경우 PostgreSQL 설명서를 참조하거나 데이터베이스 관리자에게 지원을 요청하세요.