Share via


태그 및 사용자 지정 보안 특성에 따라 BLOB에 대한 읽기 액세스 허용

이 문서에서는 ABAC(특성 기반 액세스 제어) 조건을 사용하여 Blob 인덱스 태그 및 사용자 지정 보안 특성에 따라 Blob에 대한 읽기 액세스를 허용하는 방법을 알아봅니다. 이렇게 하면 Blob에 대한 액세스를 더 쉽게 관리할 수 있습니다.

필수 조건

Microsoft Entra 테넌트에서 사용자 지정 보안 특성을 할당하고 역할 할당 조건을 추가하려면 다음이 필요합니다.

Important

기본적으로 전역 관리자 및 기타 관리자 역할에는 사용자 지정 보안 특성을 읽거나 정의하거나 할당할 수 있는 권한이 없습니다. 이러한 필수 구성 요소를 충족하지 않으면 조건 편집기에서 보안 주체/사용자 특성이 표시되지 않습니다.

조건

이 문서에서는 사용자에게 Blob 인덱스 태그와 일치하는 사용자 지정 보안 특성이 있는 경우 Blob에 대한 읽기 액세스를 허용합니다. 이 작업은 조건을 역할 할당에 추가하여 수행됩니다.

Diagram of role assignment with a condition.

예를 들어 Brenda에게 Project=Baker 특성이 있는 경우 Brenda는 Project=Baker Blob 인덱스 태그가 있는 Blob만 읽을 수 있습니다. 마찬가지로 Chandra는 Project=Cascade가 있는 Blob만 읽을 수 있습니다.

Diagram showing read access to blobs based on tags and custom security attributes.

코드에서 조건은 다음과 같습니다.

(
 (
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
 )
 OR 
 (
  @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
 )
)

조건에 대한 자세한 내용은 Azure ABAC(Azure 특성 기반 액세스 제어)란?을 참조하세요.

1단계: 새 사용자 지정 보안 특성 추가

  1. Azure Portal에 로그인합니다.

  2. Microsoft Entra ID>사용자 지정 보안 특성을 클릭합니다.

  3. 값이 BakerCascadeProject라는 특성을 추가합니다. 또는 기존 특성을 사용합니다. 자세한 내용은 Microsoft Entra ID에서 사용자 지정 보안 특성 추가 또는 비활성화를 참조하세요.

    Screenshot of adding a custom security attribute.

2단계: 사용자에게 사용자 지정 보안 특성 할당

  1. Microsoft Entra ID에서 보안 그룹을 만듭니다.

  2. 사용자를 그룹의 멤버로 추가합니다.

  3. 값이 CascadeProject 특성을 사용자에게 할당합니다. 자세한 내용은 사용자에 대한 사용자 지정 보안 특성 할당, 업데이트, 나열 또는 제거를 참조하세요.

    Screenshot of assigning a custom security attribute.

  4. 저장을 클릭하여 할당을 저장해야 합니다.

3단계: 스토리지 및 Blob 인덱스 태그 설정

  1. Blob 인덱스 태그 기능과 호환되는 스토리지 계정을 만듭니다. 자세한 내용은 Blob 인덱스 태그를 사용하여 Azure Blob 데이터 관리 및 찾기를 참조하세요.

  2. 새 컨테이너를 스토리지 계정 내에 만들고, 공용 액세스 수준프라이빗(익명 권한 없음)으로 설정합니다.

  3. 인증 유형을 Azure AD 사용자 계정으로 설정합니다.

  4. 텍스트 파일을 컨테이너에 업로드하고, 다음 Blob 인덱스 태그를 설정합니다.

    파일
    Baker 텍스트 파일 프로젝트 Baker
    Cascade 텍스트 파일 프로젝트 Cascade

    Blob 인덱스 태그에 허용되는 문자에 대한 자세한 내용은 Blob 인덱스 태그 설정을 참조하세요.

4단계: 조건을 사용하여 Storage Blob 데이터 읽기 권한자 역할 할당

  1. 새 탭을 열고, Azure Portal에 로그인합니다.

  2. 스토리지 계정이 있는 리소스 그룹을 엽니다.

  3. 액세스 제어(IAM)를 클릭합니다.

  4. 역할 할당 탭을 클릭하여 이 범위에서 역할 할당을 확인합니다.

  5. 추가>역할 할당 추가를 클릭합니다.

  6. 역할 탭에서 Storage Blob 데이터 읽기 권한자 역할을 선택합니다.

  7. 멤버 탭에서 이전에 만든 보안 그룹을 선택합니다.

  8. (선택 사항) 설명 상자에서 사용자에게 Blob 인덱스 태그와 일치하는 사용자 지정 보안 특성이 있는 경우 Blob에 대한 읽기 액세스를 입력합니다.

  9. 조건(옵션) 탭에서 조건 추가를 클릭합니다.

    역할 할당 조건 추가 페이지가 표시됩니다.

  10. 작업 추가 섹션에서 작업 추가를 클릭합니다.

    작업 선택 창이 표시됩니다. 이 창은 조건 대상이 될 역할 할당을 기준으로 데이터 작업을 필터링한 목록입니다.

  11. Blob 읽기를 클릭한 다음, 선택을 클릭합니다.

  12. 식 작성 섹션에서 추가를 클릭합니다.

  13. 다음 설정을 입력합니다.

    설정
    특성 원본 주 서버
    Attribute <attributeset>_Project
    연산자 StringEquals
    옵션 Attribute
    특성 원본 리소스
    Attribute Blob 인덱스 태그 [키의 값]
    프로젝트

    참고 항목

    보안 주체가 특성 원본의 옵션으로 나열되지 않는 경우 1단계: 새 사용자 지정 보안 특성 추가의 앞부분에서 설명한 대로 사용자 지정 보안 특성을 정의했는지 확인합니다.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. 편집기 형식으로 스크롤하고 코드를 클릭합니다.

    조건은 다음과 비슷해야 합니다.

    (
     (
      !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
     )
     OR 
     (
      @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
     )
    )
    
  15. 저장을 클릭하여 조건을 저장합니다.

  16. [검토 + 할당] 탭에서 검토 + 할당을 클릭하여 조건이 포함된 Storage Blob 데이터 읽기 권한자 역할을 할당합니다.

5단계: 리더 역할 할당

  • 이전 단계를 반복하여 리소스 그룹 범위에서 보안 그룹에 대한 읽기 권한자 역할을 할당합니다.

    참고 항목

    일반적으로 리더 역할을 할당할 필요가 없습니다. 그러나 이 작업을 수행하면 Azure Portal을 사용하여 조건을 테스트할 수 있습니다.

6단계: 조건 테스트

  1. 새 창에서 Azure Portal을 엽니다.

  2. Project=Cascade 사용자 지정 보안 특성을 사용하여 만든 사용자로 로그인합니다.

  3. 만든 스토리지 계정 및 컨테이너를 엽니다.

  4. 인증 방법이 액세스 키가 아닌 Azure AD 사용자 계정으로 설정되어 있는지 확인합니다.

    Screenshot of storage container with test files.

  5. Baker 텍스트 파일을 클릭합니다.

    Blob을 보거나 다운로드할 수 없으며 권한 부여 실패 메시지가 표시되어야 합니다.

  6. 계단식 텍스트 파일을 클릭합니다.

    Blob을 보고 다운로드할 수 있어야 합니다.

Azure PowerShell

Azure PowerShell을 사용하여 역할 할당 조건을 추가할 수도 있습니다. 다음 명령에서는 조건을 추가하는 방법을 보여 줍니다. 자세한 내용은 자습서: Azure PowerShell을 사용하여 Blob에 대한 액세스를 제한하는 역할 할당 조건 추가를 참조하세요.

조건 추가

  1. Connect-AzAccount 명령을 사용하고 표시되는 지침에 따라 역할 기반 액세스 제어 관리자로 디렉터리에 로그인합니다.

    Connect-AzAccount
    
  2. Get-AzRoleAssignment를 사용하여 보안 그룹에 할당한 역할 할당을 가져옵니다.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. 역할 할당 개체의 Condition 특성을 설정합니다. 특성 집합 이름을 사용해야 합니다.

    $groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"
    
  4. 역할 할당 개체의 ConditionVersion 특성을 설정합니다.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Set-AzRoleAssignment를 사용하여 역할 할당을 업데이트합니다.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

조건 테스트

  1. 새 PowerShell 창에서 Connect-AzAccount 명령을 사용하여 보안 그룹의 멤버로 로그인합니다.

    Connect-AzAccount
    
  2. New-AzStorageContext를 사용하여 스토리지 계정에 대한 컨텍스트를 설정합니다.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Get-AzStorageBlob을 사용하여 Baker 파일 읽기를 시도합니다.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
    

    Blob을 읽을 수 없으며 권한 부여 실패 메시지가 표시됩니다.

    Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code:
    403 - HTTP Error Message: This request is not authorized to perform this operation using this permission.
    ...
    
  4. Get-AzStorageBlob을 사용하여 Cascade 파일 읽기를 시도합니다.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx
    You should be able to read the blob.
    AccountName: <storageAccountName>, ContainerName: <containerName>
    
    Name                 BlobType  Length          ContentType                    LastModified         AccessTier SnapshotT
                                                                                                                  ime
    ----                 --------  ------          -----------                    ------------         ---------- ---------
    CascadeFile.txt      BlockBlob 7               text/plain                     2021-04-24 05:35:24Z Hot
    

Azure CLI

Azure CLI를 사용하여 역할 할당 조건을 추가할 수도 있습니다. 다음 명령에서는 조건을 추가하는 방법을 보여 줍니다. 자세한 내용은 자습서: Azure CLI를 사용하여 Blob에 대한 액세스를 제한하는 역할 할당 조건 추가를 참조하세요.

조건 추가

  1. az login 명령을 사용하고 표시되는 지침에 따라 역할 기반 액세스 제어 관리자로 디렉터리에 로그인합니다.

    az login
    
  2. az role assignment list를 사용하여 보안 그룹에 할당한 역할 할당을 가져옵니다.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. 다음 형식으로 JSON 파일을 만듭니다.

    {
        "canDelegate": null,
        "condition": "",
        "conditionVersion": "",
        "description": "",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{groupObjectId}",
        "principalName": "{principalName}",
        "principalType": "Group",
        "resourceGroup": "{resourceGroup}",
        "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "roleDefinitionName": "Storage Blob Data Reader",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}",
        "type": "Microsoft.Authorization/roleAssignments"
    }
    
  4. condition 특성을 업데이트합니다. 특성 집합 이름을 사용해야 합니다.

    "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",
    
  5. conditionVersion 특성을 업데이트합니다.

    "conditionVersion": "2.0",
    
  6. az role assignment update를 사용하여 조건을 역할 할당에 추가합니다.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

조건 테스트

  1. 새 명령 창에서 az login 명령을 사용하여 보안 그룹의 멤버로 로그인합니다.

    az login
    
  2. az storage blob show를 사용하여 Baker 파일에 대한 특성 읽기를 시도합니다.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
    

    Blob을 읽을 수 없으며 권한 부여 실패 메시지가 표시됩니다.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. az storage blob show를 사용하여 Cascade 파일에 대한 특성 읽기를 시도합니다.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login
    You should be able to read the blob.
    {
      "container": "<containerName>",
      "content": "",
      "deleted": false,
      "encryptedMetadata": null,
      "encryptionKeySha256": null,
      "encryptionScope": null,
    ...
    }
    

다음 단계