Microsoft OneDrive에서 비밀 스캔하기

Microsoft OneDrive에서 비밀 스캔하기

Microsoft OneDrive를 HCP Vault Radar의 데이터 소스로 연결하여 OneDrive 파일과 폴더의 민감한 데이터와 비밀을 모니터링할 수 있어요. 아직 베타(beta) 단계 기능이에요.

출처: 문서

본문

베타 기능: 이 기능은 현재 베타 릴리스로 제공돼요. 베타 기능은 안정적이지만 불완전할 수 있고 변경될 수 있어요. 프로덕션 워크플로우에서 베타 기능을 사용하는 것은 강력히 권장하지 않아요.

Microsoft OneDrive를 HCP Vault Radar의 데이터 소스로 연결하여 OneDrive 파일과 폴더의 민감한 데이터와 비밀을 모니터링할 수 있어요.

HCP Vault Radar가 처음이라면 HCP Vault Radar 빠른 시작(quickstart) 튜토리얼 시리즈를 확인해 보세요.

사전 요구사항(Prerequisites)

  • HCP owner 또는 admin 역할을 가진 HCP IAM 사용자
  • 스캔하려는 SharePoint 데이터가 있는 Microsoft 365 테넌트에 대한 접근
  • Microsoft 365 테넌트에서 관리자 동의 워크플로우 활성화 (테넌트 전체 동의가 제한된 경우)
  • Microsoft Entra ID에서 애플리케이션 등록 권한 (agent 스캔 전용)
  • 배포되고 실행 중인 Vault Radar agent. HCP Vault Radar operations 튜토리얼 참조 (agent 스캔 전용)

Microsoft OneDrive 데이터 소스 추가하기 (HCP Vault Radar cloud 스캔 / agent 스캔 탭)

  1. HCP owner 또는 admin 역할을 가진 HCP IAM 사용자로 HCP 포털에 로그인해요.
  2. Vault Radar를 클릭해요.
  3. Settings를 클릭해요.
  4. Data Sources를 클릭해요.
  5. HCP Vault Radar Scan을 선택해요.
  6. File Storage 아래에서 Microsoft OneDrive를 클릭해요.
  7. Connect to Microsoft OneDrive를 클릭해요. 이렇게 하면 Microsoft 로그인 및 동의 흐름이 시작돼요.
  8. 스캔하려는 테넌트의 계정으로 로그인해요.
  9. 요청된 권한을 검토하고 Accept를 클릭해요.

    관리자 동의가 필요할 수 있음: 조직이 테넌트 전체 동의를 제한하면 Microsoft가 관리자에게 승인을 요청하라는 메시지를 표시해요.

  10. HCP Vault Radar는 Authenticated to Microsoft OneDrive 메시지를 표시해요.
  11. Next를 클릭해요.
  12. All users 또는 Select users to monitor 중 하나를 선택해요.
  13. Finish를 클릭해 선택된 OneDrive 사용자의 온보딩과 스캔을 시작해요.

HCP Vault Radar에서 데이터 소스를 구성하기 전에 다음을 수행해야 해요:

  • Microsoft Entra ID에 애플리케이션 등록
  • 토큰 ID 발급 활성화
  • 필요한 Graph 권한 구성
  • 클라이언트 시크릿 생성
  • 테넌트 전체 관리자 동의 부여

ℹ️ 예시 Terraform 구성: 이 예시 Terraform 구성은 SharePoint 또는 OneDrive 같은 Azure 서비스에서 HCP Vault Radar agent 스캔을 사용하는 데 필요한 Azure 리소스를 만들어요.

경고: 조직의 정책과 절차를 준수하는지 구성에 대해 보안 팀과 검토해 주세요.

구성의 정적 값을 선호하는 명명 규칙으로 바꿔 주세요.

terraform {
  required_providers {
    azuread = {
      source  = "hashicorp/azuread"
      version = "~> 3.0"
    }
    time = {
      source  = "hashicorp/time"
      version = "~> 0.13"
    }
  }
}

provider "azuread" {}

variable "app_display_name" {
  type    = string
  default = "HashiCorp Vault Radar"
}

variable "sign_in_audience" {
  description = "AzureADMyOrg for single tenant, AzureADMultipleOrgs for multitenant"
  type        = string
  default     = "AzureADMyOrg"
}

data "azuread_client_config" "current" {}

# Resolves Microsoft Graph's application ID without hardcoding the GUID,
# which can differ across sovereign clouds (e.g. Azure Government).
data "azuread_application_published_app_ids" "well_known" {}

resource "azuread_service_principal" "msgraph" {
  client_id    = data.azuread_application_published_app_ids.well_known.result.MicrosoftGraph
  use_existing = true
}

# --- Register a Microsoft Entra application ---
resource "azuread_application" "vault_radar" {
  display_name     = var.app_display_name
  sign_in_audience = var.sign_in_audience
  owners           = [data.azuread_client_config.current.object_id]

  # --- Enable ID token issuance ---
  web {
    implicit_grant {
      id_token_issuance_enabled = true
    }
  }

  # --- Configure Microsoft Graph permissions ---
  required_resource_access {
    resource_app_id = data.azuread_application_published_app_ids.well_known.result.MicrosoftGraph

    # Application permissions
    resource_access {
      id   = azuread_service_principal.msgraph.app_role_ids["Sites.Read.All"]
      type = "Role"
    }
    resource_access {
      id   = azuread_service_principal.msgraph.app_role_ids["Files.Read.All"]
      type = "Role"
    }
    resource_access {
      id   = azuread_service_principal.msgraph.app_role_ids["Organization.Read.All"]
      type = "Role"
    }
    resource_access {
      id   = azuread_service_principal.msgraph.app_role_ids["User.Read.All"]
      type = "Role"
    }

    # Delegated permissions
    resource_access {
      id   = azuread_service_principal.msgraph.oauth2_permission_scope_ids["openid"]
      type = "Scope"
    }
    resource_access {
      id   = azuread_service_principal.msgraph.oauth2_permission_scope_ids["profile"]
      type = "Scope"
    }
    resource_access {
      id   = azuread_service_principal.msgraph.oauth2_permission_scope_ids["offline_access"]
      type = "Scope"
    }
  }
}

# The app needs its own service principal (enterprise app object) before
# admin consent can be granted to it.
resource "azuread_service_principal" "vault_radar" {
  client_id = azuread_application.vault_radar.client_id
  owners    = [data.azuread_client_config.current.object_id]
}

# --- Grant admin consent: application permissions ---
resource "azuread_app_role_assignment" "sites_read_all" {
  app_role_id         = azuread_service_principal.msgraph.app_role_ids["Sites.Read.All"]
  principal_object_id = azuread_service_principal.vault_radar.object_id
  resource_object_id  = azuread_service_principal.msgraph.object_id
}

resource "azuread_app_role_assignment" "files_read_all" {
  app_role_id         = azuread_service_principal.msgraph.app_role_ids["Files.Read.All"]
  principal_object_id = azuread_service_principal.vault_radar.object_id
  resource_object_id  = azuread_service_principal.msgraph.object_id
}

resource "azuread_app_role_assignment" "organization_read_all" {
  app_role_id         = azuread_service_principal.msgraph.app_role_ids["Organization.Read.All"]
  principal_object_id = azuread_service_principal.vault_radar.object_id
  resource_object_id  = azuread_service_principal.msgraph.object_id
}

resource "azuread_app_role_assignment" "user_read_all" {
  app_role_id         = azuread_service_principal.msgraph.app_role_ids["User.Read.All"]
  principal_object_id = azuread_service_principal.vault_radar.object_id
  resource_object_id  = azuread_service_principal.msgraph.object_id
}

# --- Grant admin consent: delegated permissions (all users) ---
resource "azuread_service_principal_delegated_permission_grant" "vault_radar" {
  service_principal_object_id          = azuread_service_principal.vault_radar.object_id
  resource_service_principal_object_id = azuread_service_principal.msgraph.object_id
  claim_values                         = ["openid", "profile", "offline_access"]
  # user_object_id intentionally omitted: this grants consent for all users
}

# --- Create a client secret ---
resource "time_rotating" "vault_radar_secret" {
  rotation_days = 180
}

resource "azuread_application_password" "vault_radar" {
  application_id = azuread_application.vault_radar.id
  display_name   = "vault-radar"
  start_date     = time_rotating.vault_radar_secret.id
  end_date       = timeadd(time_rotating.vault_radar_secret.id, "4320h") # ~180 days
}

output "client_id" {
  value = azuread_application.vault_radar.client_id
}

output "tenant_id" {
  value = data.azuread_client_config.current.tenant_id
}

output "client_secret" {
  value     = azuread_application_password.vault_radar.value
  sensitive = true
}

Terraform 실행이 완료되면 client_id, tenant_id, client_secret을 HCP Vault Radar agent의 환경 변수로 내보내요.

  1. HCP owner 또는 admin 역할을 가진 HCP IAM 사용자로 HCP 포털에 로그인해요.
  2. Vault Radar를 클릭해요.
  3. Settings를 클릭해요.
  4. Data Sources를 클릭해요.
  5. HCP Vault Radar Agent Scan을 선택해요.
  6. File Storage 아래에서 Microsoft OneDrive를 클릭해요.
  7. 다음 정보를 입력해요:
    • Microsoft Entra tenant ID: Microsoft Entra 애플리케이션의 Directory(tenant) ID.
    • Microsoft Entra client ID: agent 호스트에 client ID를 저장한 환경 변수 경로. 예시: ``` env://MICROSOFT_ONEDRIVE_CLIENT_ID
    • Microsoft Entra client secret: agent 호스트에 client secret을 저장한 환경 변수 경로. 예시: ``` env://MICROSOFT_ONEDRIVE_CLIENT_SECRET
  8. Next를 클릭해요.
  9. All users 또는 Select users to monitor 중 하나를 선택해요.
  10. Finish를 클릭해 선택된 OneDrive 사용자의 온보딩과 스캔을 시작해요.

리소스에 그룹 할당하기

데이터 소스를 추가한 후에는 admin 역할을 가진 HCP 사용자가 각 데이터 소스 내의 모니터링되는 각 리소스에 그룹을 할당해야 해요. 각 리소스는 하나의 그룹에만 할당할 수 있어요.

메모: HCP IAM admin 역할을 가진 사용자는 다른 그룹의 구성원일 필요가 없어요. admin 역할의 계정은 Vault Radar에 대한 전체 접근 권한을 가져요.

아직 그룹이 없다면 Identity and Access Management groups 문서를 참조해 그룹을 만들어 주세요.

  1. Project 대시보드로 이동해요.
  2. Access control (IAM)을 클릭해요.
  3. Add new assignment를 클릭해요.
  4. Search for an assignee 검색 필드에서 그룹 이름을 검색해요.
  5. 검색 결과에서 그룹 이름을 클릭해요.
  6. Select service 풀다운 메뉴를 클릭하고 Vault Radar를 선택해요.
  7. Select role 풀다운 메뉴를 클릭하고 Vault Radar Developer 역할을 선택해요.
  8. Save를 클릭해요.
  9. Back to Dashboard를 클릭해요.
  10. Vault Radar를 클릭해요.
  11. Resources를 클릭해요.
  12. 그룹에 할당할 리소스를 선택하고 Assign groups를 클릭해요.
  13. Assign resource to group 풀다운 메뉴를 클릭해요.
  14. 리소스에 접근이 필요한 그룹을 선택해요.
  15. Viewer 또는 Contributor 역할 중 하나를 선택해요.
  16. OK를 클릭해요.

데이터 소스 업데이트하기

  1. Settings로 이동해요.
  2. Data sources를 클릭해요.
  3. 데이터 소스 오른쪽의 세로 줄임표를 클릭해요.
  4. 모니터링되는 데이터 소스를 업데이트하려면 Edit data sources를 클릭해요.
  5. 인증 방법을 업데이트하려면 Select authentication method 드롭다운에서 새 인증 방법을 선택해요.
  6. 토큰을 업데이트하려면 Edit data source host details를 클릭해요.
  7. 데이터 소스를 삭제하려면 Delete data source를 클릭해요.

튜토리얼(Tutorials)

환경에서 HCP Vault Radar를 평가하고 구현하는 방법을 튜토리얼로 배워보세요.

  • HCP Vault Radar quickstart - 가상의 커피 회사 HashiCups가 HCP Vault Radar를 온보딩하고 데이터 소스에서 비밀을 스캔하는 과정을 따라가요.
  • HCP Vault Radar operations - HashiCups 운영 팀이 Vault Radar agent로 데이터 소스를 스캔하고 HCP Vault와 결과를 연관지어 비밀을 관리하는 방법을 배워요.
  • HCP Vault Radar developer - HashiCups 개발자들이 비밀 노출을 이해하고 잠재적 위험을 식별하며 소프트웨어 개발 수명 주기 동안 유출된 비밀을 방지하는 방법을 배워요.

더 알아보기 (Learn more)