Azure Synapse 서버리스 SQL 풀에서 데이터 보안 및 사용자 관리 - Training
Azure Synapse 서버리스 SQL 풀에서 데이터 보안 및 사용자 관리
learn.microsoft.com
학습 목표
- Azure Synapse 서버리스 SQL 풀에서 인증 방법 선택
- Azure Synapse 서버리스 SQL 풀의 사용자 관리
- Azure Synapse 서버리스 SQL 풀의 사용자 권한 관리
Azure Synapse 서버리스 SQL 풀에서 인증 방법 선택
- 서버리스 SQL 풀 인증은 엔드포인트에 연결할 때 사용자가 자신의 ID를 증명하는 방법을 나타낸다. 지원되는 두가지 인증 유형은 다음과 같다.
- SQL 인증 : 사용자 이름과 암호 사용
- Microsoft Entra ID 인증 : 다단계 인증 설정 가능, Active Directory 인증(통합 보안) 사용
[권한 부여]
- 사용자가 서버리스 SQL 풀 데이터베이스 내에서 수행할 수 있는 작업을 나타내며 사용자 계정의 데이터베이스 역할 멤버 자격 및 개체 수준 권한으로 제어된다.
- SQL 인증을 사용하는 경우, SQL 사용자는 서버리스 SQL풀에만 존재하며 권한의 범위는 서버리스 SQL 풀의 개체로 지정된다. SQL 사용자는 서버리스 SQL 풀 범위에서만 존재하므로 다른 서비스의 보안 개체에 대한 액세스는 SQL 사용자에게 직접 부여할 수 없다. SQL 사용자는 스토리지 계정의 파일에 액세스하기 위한 권한을 부여받아야 한다.
- Microsoft Entra 인증을 사용하는 경우, 서버리스 SQL 풀 및 Azure Storage와 같은 기타 서비스에 로그인하고 Microsoft Entra 사용자에게 권한을 부여할 수 있다.
[스토리지 계정에 액세스]
- 서버리스 SQL 풀 서비스에 로그인한 사용자는 Azure Storage의 파일에 액세스하고 쿼리할 수 있는 권한이 있어야 한다. 서버리스 SQL 풀에서 지원하는 권한 부여 유형은 다음과 같다.
- 익명 액세스 : 익명 액세스를 허용하는 Azure 스토리지 계정에 있는 공개적으로 사용 가능한 파일에 액세스한다.
- 공유 액세스 서명 (SAS) : 스토리지 계정의 리소스에 대한 위임된 액세스를 제공한다. SAS를 사용하면 계정 키를 공유하지 않고 스토리지 계정의 리소스에 대한 액세스 권한을 클라이언트에 부여할 수 있다. SAS는 SAS를 사용하는 클라이언트에 부여하는 액세스 유형에 대한 세부적인 제어(유효성 간격, 부여된 권한, 허용되는 IP 주소 범위, 허용 되는 프로토콜)를 제공한다.
- 관리 ID : 서버리스 SQL 풀을 위한 Azure 서비스를 제공하는 Microsoft Entra ID의 기능. 또한 Microsoft Entra ID에 자동으로 관리 ID를 배포한다. 이 ID는 Azure Storage에서 데이터 액세스에 대한 요청을 승인하는데 사용될 수 있다. 데이터에 액세스하기 전에 Azure Storage 관리자가 데이터에 액세스할 수 있는 권한을 관리 ID에 부여해야 한다. 관리 ID 에 대한 권한 부여는 다른 Microsoft Entra 사용자에게 권한 부여와 동일한 방식으로 수행된다.
- 사용자 ID : "통과"라고도 하는 것은 서버리스 SQL 풀에 로그인한 Microsoft Entra 사용자의 ID를 사용하여 데이터에 대한 액세스 권한을 부여하는 권한 부여 형식이다. 데이터에 액세스하기 전에 Azure Storage 관리자는 Microsoft Entra 사용자에게 데이터에 액세스할 수 있는 권한을 부여해야 한다. 이 권한 부여 형식은 서버리스 SQL풀에 로그인한 Microsoft Entra 사용자를 사용하므로 SQL 사용자 유형에는 지원되지 않는다.
- 데이터베이스 사용자에 대해 지원되는 권한 부여 유형
인증 형식 | SQL 사용자 | Microsoft Entra 사용자 |
사용자 ID | X | O |
SAS | O | O |
관리 ID | X | O |
- 지원되는 스토리지 및 권한 부여 유형
권한 부여 유형 | Blob Storage | ADLS Gen1 | ADLS Gen2 |
사용자ID | O | X | O |
SAS | O | O | O |
관리 ID | O | O | O |
Azure Synapse 서버리스 SQL 풀의 사용자 관리
- 관리 > 액세스 제어 메뉴에서 가능
Azure Synapse 서버리스 SQL 풀의 사용자 권한 관리
- 데이터를 보호하기 위해 Azure Storage는 Azure RBAC(Azure 역할 기반 액세스 제어) 및 ACL(액세스 제어 목록)을 모두 지원하는 액세스 제어 모델을 구현한다.
- 보안 주체를 파일 및 디렉터리에 대한 액세스 수준과 연결할 수 있다. 해당 연결은 ACL에 캡처된다. 스토리지 계정의 각 파일과 디렉터리에는 액세스 제어 목록이 있다. 보안 주체가 파일이나 디렉터리에 대한 작업을 시도하는 경우 ACL 검사는 해당 보안 주체에게 작업을 수행할 수 있는 올바른 권한 수준이 있는지 확인한다.
- 액세스 제어 목록에는 다음 두가지 종류가 있다.
- 액세스 ACL : 개체에 대한 액세스를 제어한다. 파일과 디렉터리 모두에 액세스 ACL이 있다.
- 기본 ACL : 디렉터리에 생성된 모든 자식 항목의 액세스 ACL을 결정하는 디렉터리와 연결된 ACL 템플릿이다. 파일에는 기본 ACL이 없다.
- 액세스 ACL 및 기본 ACL의 구조는 모두 동일하다.
- 컨테이너 개체에 대한 권한은 읽기, 쓰기, 실행이며 다음 표와 같이 파일 및 디렉터리에서 사용할 수 있다.
* 권한 수준
사용권한 | 파일 | 디렉터리 |
읽기(R) | 파일의 내용을 읽을 수 있다. | 디렉터리의 내용을 나열하려면 읽기 및 실행이 필요하다. |
쓰기(W) | 쓰거나 파일에 추가할 수 있다. | 디렉터리에 자식 항목을 만들려면 쓰기 및 실행이 필요하다. |
실행(X) | Data Lake Storage Gen2의 컨텍스트에서는 의미가 없다. | 디렉터리의 자식 항목을 트래버스하는데 필요하다. |
[ACL 설정 지침]
- 항상 Microsoft Entra 보안 그룹을 ACL 항목에 할당된 주체로 사용한다. 개별 사용자 또는 서비스 주체를 직접 할당할 수 있는 기회를 거부한다.
- 이 구조를 사용하면 ACL을 전체 디렉터리 구조에 다시 적용하지 않고도 사용자 또는 서비스 주체를 추가하고 제거할 수 있다. 대신 적절한 Microsoft Entra 보안 그룹에서 사용자 및 서비스 주체를 추가하거나 제거할 수 있다.
- 그룹은 여러 방법으로 설정할 수 있다. 예를 들어 서버에서 생성된 로그 데이터를 포함하는 /LogData 디렉터리가 있다고 가정해 본다. ADF는 해당 폴더에 데이터를 수집한다. 서비스 엔지니어링 팀의 특정 사용자가 로그를 업로드하고 해당 폴더의 다른 사용자를 관리하며, 다양한 Databricks 클러스터는 해당 폴더의 로그를 분석한다.
- LogsWriter 그룹과 LogsReader 그룹을 만들어 해당 활동을 활성화할 수 있다. 그룹을 만든 후, 다음과 같이 권한을 할당할 수 있다.
- rwx 권한이 있는 /LogData 디렉터리의 ACL에 LogsWriter 그룹을 추가한다.
- r-x권한이 있는 /LogData 디렉터리의 ACL에 LogsReader 그룹을 추가한다.
- ADF에 대한 서비스 주체 개체 또는 MSI(관리 서비스 ID)를 LogsWriters 그룹에 추가한다.
- LogsWriter 그룹에 서비스 엔지니어링 팀의 사용자를 추가한다.
- Databricks에 대한 서비스 주체 개체 또는 MSI를 LogsReader 그룹에 추가한다.
- 서비스 엔지니어링팀의 사용자가 퇴사하는 경우 LogsWriter그룹에서 제거하면 된다. 해당 사용자를 그룹에 추가하지 않고 해당 사용자에 대한 전용 ACL 항목을 추가한 경우 /LogData 디렉터리에서 해당 ACL 항목을 제거해야 한다. 또한 /LogData 디렉터리의 전체 디렉터리 계층 구조에 있는 모든 하위 디렉터리 및 파일에서 항목을 제거해야 한다.
[서버리스 SQL 풀 사용자에게 필요한 역할]
- 읽기전용 권한 : Storage Blob 데이터 읽기 권한자라는 역할 할당
- 읽기/쓰기 권한 : Storage Blob 데이터 기여자 역할 할당, 사용자가 CETAS에 액세스해야 하는 경우도 필요
[데이터베이스 수준 권한]
- 사용자에게 더 세부적인 액세스를 제공하려면 SQL 구문을 사용하여 로그인 및 사용자를 만들어야 한다.
1. 로그인 만들기
use master
CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
2. 사용자 만들기
use yourdb -- Use your DB name
CREATE USER alias FROM LOGIN [alias@domain.com];
3. 지정된 역할의 구성원에 사용자 추가
use yourdb -- Use your DB name
alter role db_datareader
Add member alias -- Type USER name from step 2
-- You can use any Database Role which exists
-- (examples: db_owner, db_datareader, db_datawriter)
-- Replace alias with alias of the user you would like to give access and domain with the company domain you are using.
[서버 수준 권한]
- 사용자에게 모든 서버리스 SQL 풀 데이터베이스에 대한 전체 액세스 권한을 부여하려면 다음 예제 단계 따른다.
CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
ALTER SERVER ROLE sysadmin ADD MEMBER [alias@domain.com];