Microsoft SharePoint에서 비밀 검사하기

Microsoft SharePoint에서 비밀 검사하기

Microsoft SharePoint를 HCP Vault Radar의 데이터 소스로 연결하면 SharePoint 사이트와 문서 라이브러리에서 민감한 데이터와 비밀(secret)을 모니터링할 수 있어요. 이 페이지에서는 SharePoint 데이터 소스를 추가하고 검사하는 방법을 안내해 드릴게요.

출처: 문서

본문

Microsoft SharePoint에서 비밀 검사하기

[!IMPORTANT] 베타 기능: 이 기능은 현재 베타 릴리스로 제공됩니다. 베타 기능은 안정적이지만 불완전할 수 있고 변경될 수 있습니다. 프로덕션 워크플로에서 베타 기능을 사용하는 것은 강력히 권장하지 않습니다. 기능이 원활하게 동작하지 않거나 예상치 못한 문제가 발생할 수 있기 때문입니다.

Microsoft SharePoint를 HCP Vault Radar의 데이터 소스로 연결하여 SharePoint 사이트와 문서 라이브러리에서 민감한 데이터와 비밀을 모니터링할 수 있습니다. HCP Vault Radar가 처음이라면 HCP Vault Radar quickstart 튜토리얼 시리즈를 확인해 보세요.

사전 요구 사항

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

Microsoft SharePoint 데이터 소스 추가하기

HCP Vault Radar 클라우드 검사

  • HCP owner 또는 admin 역할을 가진 HCP IAM 사용자로 HCP Portal에 로그인합니다.
  • Vault Radar를 클릭합니다.
  • Settings를 클릭합니다.
  • Data Sources를 클릭합니다.
  • HCP Vault Radar Scan을 선택합니다.
  • Team Collaboration 아래에서 Microsoft SharePoint를 클릭합니다.
  • Connect to Microsoft SharePoint를 클릭합니다. 그러면 Microsoft 로그인 및 동의 흐름이 시작됩니다.
  • 검사하려는 테넌트의 계정으로 로그인합니다.
  • 요청된 권한을 검토하고 Accept를 클릭합니다.

[!NOTE] 관리자 동의가 필요할 수 있습니다. 조직에서 테넌트 전체 동의를 제한하는 경우, Microsoft는 관리자에게 승인을 요청하라는 메시지를 표시합니다.

  • HCP Vault Radar에 Authenticated to Microsoft SharePoint 메시지가 표시됩니다.
  • Next를 클릭합니다.
  • All sites 또는 Select sites to monitor 중 하나를 선택합니다.
  • Finish를 클릭하여 선택한 SharePoint 사이트의 온보딩과 검사를 시작합니다.

HCP Vault Radar 에이전트 검사

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

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

ℹ️ 예시 Terraform 구성 이 예시 Terraform 구성은 HCP Vault Radar 에이전트 검사가 SharePoint나 OneDrive와 같은 Azure 서비스를 사용할 수 있도록 필요한 Azure 리소스를 만듭니다.

[!WARNING] 조직의 정책과 절차를 준수하는지 확인하려면 보안 팀과 구성을 검토하세요. 구성의 정적 값을 선호하는 명명 규칙으로 교체하세요.

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 에이전트의 환경 변수로 내보냅니다.

  • HCP owner 또는 admin 역할을 가진 HCP IAM 사용자로 HCP Portal에 로그인합니다.
  • Vault Radar를 클릭합니다.
  • Settings를 클릭합니다.
  • Data Sources를 클릭합니다.
  • HCP Vault Radar Agent Scan을 선택합니다.
  • Team Collaboration 아래에서 Microsoft SharePoint를 클릭합니다.
  • Microsoft Entra tenant ID: Microsoft Entra 애플리케이션의 Directory(테넌트) ID.
  • Microsoft Entra client ID: 에이전트 호스트에 클라이언트 ID를 저장한 환경 변수 경로. 예:
env://MICROSOFT_SHAREPOINT_CLIENT_ID
  • Microsoft Entra client secret: 에이전트 호스트에 클라이언트 시크릿을 저장한 환경 변수 경로. 예:
env://MICROSOFT_SHAREPOINT_CLIENT_SECRET
  • Next를 클릭합니다.
  • All sites 또는 Select sites to monitor 중 하나를 선택합니다.
  • Finish를 클릭하여 선택한 SharePoint 사이트의 온보딩과 검사를 시작합니다.

리소스에 그룹 할당하기

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

[!NOTE] HCP IAM admin 역할이 있는 사용자는 다른 그룹의 멤버가 될 필요가 없습니다. admin 역할이 있는 계정은 Vault Radar에 대한 전체 액세스 권한을 가집니다.

아직 그룹이 없다면 Identity and Access Management 그룹 문서를 참조하여 그룹을 만드세요.

  • Project dashboard로 이동합니다.
  • **Access control (IAM)**을 클릭합니다.
  • Add new assignment를 클릭합니다.
  • Search for an assignee 검색 필드에서 그룹 이름을 검색합니다.
  • 검색 결과에서 그룹 이름을 클릭합니다.
  • Select service 풀다운 메뉴를 클릭하고 Vault Radar를 선택합니다.
  • Select role 풀다운 메뉴를 클릭하고 Vault Radar Developer 역할을 선택합니다.
  • Save를 클릭합니다.
  • Back to Dashboard를 클릭합니다.
  • Vault Radar를 클릭합니다.
  • Resources를 클릭합니다.
  • 그룹에 할당하려는 리소스를 선택하고 Assign groups를 클릭합니다.
  • Assign resource to group 풀다운 메뉴를 클릭합니다.
  • 리소스에 대한 액세스가 필요한 그룹을 선택합니다.
  • Viewer 또는 Contributor 역할 중 하나를 선택합니다.
  • OK를 클릭합니다.

데이터 소스 업데이트하기

  • Settings로 이동합니다.
  • Data sources를 클릭합니다.
  • 데이터 소스 오른쪽의 세로 생략 부호(vertical ellipsis)를 클릭합니다.
  • 모니터링되는 데이터 소스를 업데이트하려면 Edit data sources를 클릭합니다.
  • 인증 방법을 업데이트하려면 Select authentication method 드롭다운에서 새 인증 방법을 선택합니다.
  • 토큰을 업데이트하려면 Edit data source host details를 클릭합니다.
  • 데이터 소스를 삭제하려면 Delete data source를 클릭합니다.

튜토리얼

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

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

더 알아보기 (Learn more)