이 문서에서는 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 스크립트를 사용하려면 다음 단계를 수행합니다.
- 스크립트를 .로
CreateUser.sql저장합니다. - 변수를 사용하여
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 설명서를 참조하거나 데이터베이스 관리자에게 지원을 요청하세요.