Azure Synapse 서버리스 SQL 풀의 사용자 권한 관리
데이터를 보호하기 위해 Azure Storage는 Azure RBAC(Azure 역할 기반 액세스 제어) 및 ACL(액세스 제어 목록)(예: POSIX(Portable Operating System Interface for Unix))을 모두 지원하는 액세스 제어 모델을 구현합니다.
보안 주체를 파일 및 디렉터리에 대한 액세스 수준과 연결할 수 있습니다. 해당 연결은 ACL(액세스 제어 목록)에 캡처됩니다. 스토리지 계정의 각 파일과 디렉터리에는 액세스 제어 목록이 있습니다. 보안 주체가 파일이나 디렉터리에 대한 작업을 시도하는 경우 ACL 검사는 해당 보안 주체(사용자, 그룹, 서비스 주체 또는 관리 ID)에게 작업을 수행할 수 있는 올바른 권한 수준이 있는지 확인합니다.
액세스 제어 목록에는 다음 두 가지 종류가 있습니다.
액세스 ACL
개체에 대한 액세스를 제어합니다. 파일과 디렉터리 모두에 액세스 ACL이 있습니다.
기본 ACL
디렉터리에 생성된 모든 자식 항목의 액세스 ACL을 결정하는 디렉터리와 연결된 ACL 템플릿입니다. 파일에는 기본 ACL이 없습니다.
액세스 ACL 및 기본 ACL의 구조는 모두 동일합니다.
컨테이너 개체에 대한 권한은 읽기, 쓰기, 실행이며 다음 표와 같이 파일 및 디렉터리에서 사용할 수 있습니다.
사용 권한 수준
| 사용 권한 | 파일 | 디렉터리 |
|---|---|---|
| 읽기(r) | 파일의 내용을 읽을 수 있습니다. | 디렉터리의 내용을 나열하려면 읽기 및 실행이 필요합니다. |
| 쓰기(w) | 쓰거나 파일에 추가할 수 있습니다. | 디렉터리에 자식 항목을 만들려면 쓰기 및 실행이 필요합니다. |
| 실행(x) | Data Lake Storage Gen2의 컨텍스트에서는 의미가 없습니다. | 디렉터리의 자식 항목을 트래버스하는 데 필요합니다. |
ACL 설정 지침
항상 Microsoft Entra 보안 그룹을 ACL 항목에 할당된 주체로 사용합니다. 개별 사용자 또는 서비스 주체를 직접 할당할 수 있는 기회를 거부합니다. 이 구조를 사용하면 ACL을 전체 디렉터리 구조에 다시 적용하지 않고도 사용자 또는 서비스 주체를 추가하고 제거할 수 있습니다. 대신 적절한 Microsoft Entra 보안 그룹에서 사용자 및 서비스 주체를 추가하거나 제거할 수 있습니다.
그룹은 여러 방법으로 설정할 수 있습니다. 예를 들어 서버에서 생성된 로그 데이터를 보관하는 /LogData 라는 디렉터리가 있다고 상상해 보십시오. ADF(Azure Data Factory)는 해당 폴더에 데이터를 수집합니다. 서비스 엔지니어링 팀의 특정 사용자가 로그를 업로드하고 해당 폴더의 다른 사용자를 관리하며, 다양한 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(Create Table As Select)에 액세스해야 하는 경우 읽기/쓰기 권한이 필요합니다.
참고
사용자에게 소유자 또는 기여자 역할이 있는 경우 해당 역할은 충분하지 않습니다. Azure Data Lake Storage Gen2에는 할당해야 하는 슈퍼 역할이 있습니다.
데이터베이스 수준 권한
사용자에게 더 세부적인 액세스를 제공하려면 Transact-SQL 구문을 사용하여 로그인 및 사용자를 만들어야 합니다.
사용자에게 단일 서버리스 SQL 풀 데이터베이스에 대한 액세스 권한을 부여하려면 다음 예제의 단계를 따릅니다.
로그인 만들기
use master CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;사용자 만들기
use yourdb -- Use your DB name CREATE USER alias FROM LOGIN [alias@domain.com];지정된 역할의 구성원에 사용자 추가
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];