조건 및 사용자 지정 보안 특성을 사용하여 Azure 역할 할당 관리 스케일링

Azure RBAC(Azure 역할 기반 액세스 제어)에는 구독당 역할 할당 제한이 있습니다. 수백 개 또는 수천 개의 Azure 역할 할당을 만들어야 하는 경우 이 제한이 발생할 수 있습니다. 수백 또는 수천 개의 역할 할당을 관리하는 것은 어려울 수 있습니다. 시나리오에 따라 역할 할당 수를 줄이고 액세스를 더 쉽게 관리할 수 있습니다.

이 문서에서는 Azure ABAC(Azure 특성 기반 액세스 제어) 조건 및 보안 주체에 대한 Microsoft Entra 사용자 지정 보안 특성을 사용하여 역할 할당 관리를 스케일링하기 위한 솔루션을 설명합니다.

예제 시나리오

다음 구성을 설정하려는 수천 명의 고객이 있는 Contoso라는 회사를 생각해 보세요.

  • 보안 및 성능상의 이유로 128개 스토리지 계정에 고객 데이터를 배포합니다.
  • 각 고객에 대한 컨테이너가 있는 각 스토리지 계정에 2,000개의 컨테이너를 추가합니다.
  • 고유한 Microsoft Entra 서비스 주체로 각 고객을 대표합니다.
  • 각 고객이 컨테이너의 개체에 액세스할 수 있지만 다른 컨테이너에는 액세스할 수 없습니다.

이 구성에는 잠재적으로 역할 할당 제한을 상당히 초과하는 구독에 256,000개의 Storage Blob 데이터 소유자 역할 할당이 필요할 수 있습니다. 이렇게 많은 역할 할당을 유지 관리하는 것은 불가능하지는 않지만 어려울 수 있습니다.

Diagram showing thousands for role assignments.

예제 솔루션

역할 할당 조건을 사용하면 관리 가능한 방식으로 이 시나리오를 처리할 수 있습니다. 다음 다이어그램에서는 조건을 사용하여 256,000개의 역할 할당을 하나의 역할 할당으로 줄이는 솔루션을 보여 줍니다. 역할 할당은 더 높은 리소스 그룹 범위에 있으며 조건은 컨테이너에 대한 액세스를 제어하는 데 도움이 됩니다. 조건은 컨테이너 이름이 고객의 서비스 주체에 대한 사용자 지정 보안 특성과 일치하는지 여부를 확인합니다.

Diagram showing one role assignment and a condition.

다음은 이 솔루션이 작동하게 하는 조건의 식입니다.

  @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
  StringEquals
  @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Contosocustomer_name]

전체 조건은 다음과 유사합니다. 작업 목록은 필요한 작업으로만 조정할 수 있습니다.

(
 (
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/modifyPermissions/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/permanentDelete/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write'})
 )
 OR 
 (
  @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Contosocustomer_name]
 )
)

이 솔루션을 사용하는 이유는 무엇인가요?

데이터 평면 리소스에 대한 액세스를 제공하는 데 사용할 수 있는 몇 가지 액세스 제어 메커니즘이 있습니다.

액세스 키는 데이터 평면 리소스에 대한 액세스를 제공하는 일반적인 방법입니다. 액세스 키는 액세스 키를 소유한 사람에게 읽기, 쓰기 및 삭제 권한을 제공합니다. 즉, 공격자가 액세스 키를 가져올 수 있는 경우 중요한 데이터에 액세스할 수 있습니다. 액세스 키에는 ID 바인딩이 없고 만료되지 않으며 저장해야 하는 보안 위험이 있습니다.

액세스 키와 마찬가지로 SAS(공유 액세스 서명) 토큰에는 ID 바인딩이 없지만 정기적으로 만료됩니다. ID 바인딩의 부족은 액세스 키와 동일한 보안 위험을 나타냅니다. 클라이언트에 오류가 발생하지 않도록 만료를 관리해야 합니다. SAS 토큰은 매일 관리하고 작동하기 위해 추가 코드가 필요하며 DevOps 팀에 상당한 오버헤드가 될 수 있습니다.

Azure RBAC는 세분화된 중앙 집중식 액세스 제어를 제공합니다. Azure RBAC에는 보안 위험을 줄이는 ID 바인딩이 있습니다. 조건을 사용하면 잠재적으로 역할 할당 관리를 스케일링하고, 액세스가 유연하고 동적인 특성을 기준으로 하므로 액세스 제어를 더 쉽게 유지 관리할 수 있습니다.

이 솔루션의 이점은 다음과 같습니다.

  • 중앙 집중식 액세스 제어
  • 수월한 유지관리
  • 액세스 키 또는 SAS 토큰에 의존하지 않음
  • 각 개체에 대한 액세스를 관리할 필요가 없음
  • 잠재적으로 보안 태세를 개선할 수 있음

이 솔루션을 사용할 수 있나요?

시나리오가 비슷한 경우 다음 단계에 따라 이 솔루션을 사용할 수 있는지 확인합니다.

1단계: 필수 구성 요소를 충족하는지 확인

이 솔루션을 사용하려면 다음이 있어야 합니다.

2단계: 조건에서 사용할 수 있는 특성 식별

다음과 같이 조건에서 사용할 수 있는 몇 가지 특성이 있습니다.

  • 컨테이너 이름
  • Blob 경로
  • Blob 인덱스 태그 [키]
  • Blob 인덱스 태그 [키의 값]

사용자, 엔터프라이즈 애플리케이션 및 관리 ID에 대한 사용자 지정 보안 특성도 정의할 수도 있습니다.

자세한 내용은 Azure 역할 할당 조건 형식 및 구문Microsoft Entra ID의 사용자 지정 보안 특성이란?을 참조하세요.

3단계: 더 높은 범위에서 조건 만들기

더 높은 범위의 조건을 사용하여 액세스를 관리하는 하나 이상의 역할 할당을 만듭니다. 자세한 내용은 Azure Portal 사용하여 Azure 역할 할당 조건 추가 또는 편집을 참조하세요.

다음 단계