Blob Storage에 연결
BigQuery 관리자는 데이터 분석가가 Azure Blob Storage에 저장된 데이터에 액세스할 수 있도록 연결을 만들 수 있습니다.
BigQuery Omni는 연결을 통해 Blob Storage 데이터에 액세스합니다. BigQuery Omni는 Azure 워크로드 아이덴티티 제휴를 지원합니다. Azure 워크로드 아이덴티티 제휴를 지원하는 BigQuery Omni를 사용하면 테넌트의 Azure 애플리케이션에 대한 액세스 권한을 Google 서비스 계정에 부여할 수 있습니다. 개발자나 Google에서 관리할 애플리케이션 클라이언트 보안 비밀이 없습니다.
BigQuery Azure 연결을 만든 후에는 Blob Storage 데이터를 쿼리하거나 쿼리 결과를 Blob Storage로 내보내기할 수 있습니다.
시작하기 전에
다음 리소스를 만들었는지 확인합니다.
용량 기반의 가격 책정 모델을 사용하는 경우 프로젝트에 BigQuery Reservation API가 사용 설정되었는지 확인합니다. 가격 책정에 대한 자세한 내용은 BigQuery Omni 가격 책정을 참조하세요.
Azure 구독이 포함된 Azure 테넌트입니다.
다음 사양을 충족하는 Azure Storage 계정:
범용 V2 계정 또는 Blob Storage 계정입니다.
계층적 네임스페이스를 사용합니다. 자세한 내용은 Azure Data Lake Storage Gen2에 사용할 스토리지 계정 만들기를 참조하세요.
데이터가 지원되는 형식 중 하나로 채워집니다.
데이터가
azure-eastus2
리전에 있습니다.
필요한 역할
-
연결을 만들어 Azure Blob Storage 데이터에 액세스하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트의 BigQuery 연결 관리자(
roles/bigquery.connectionAdmin
) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요. -
테넌트에 대한 다음 Azure IAM 권한이 있는지 확인합니다.
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
할당량
할당량에 대한 자세한 내용은 BigQuery Connection API를 참조하세요.
Azure 연결 만들기
Azure 연결을 만들려면 다음 단계를 수행하세요.
- Azure 테넌트에서 애플리케이션을 만듭니다.
- BigQuery Azure 연결 만들기.
- 제휴 사용자 인증 정보를 추가합니다.
- BigQuery Azure AD 애플리케이션에 역할을 할당합니다.
제휴 ID 사용자 인증 정보를 사용하여 Azure의 데이터에 액세스하는 방법에 대한 자세한 내용은 워크로드 아이덴티티 제휴를 참조하세요.
Azure 테넌트에서 애플리케이션 만들기
Azure 테넌트에서 애플리케이션을 만들려면 다음 단계를 따르세요.
Azure 포털
Azure 포털에서 App registrations(앱 등록)로 이동한 다음 New registration(신규 등록)을 클릭합니다.
Names(이름)에 애플리케이션 이름을 입력합니다.
Supported account types(지원되는 계정 유형)에 Accounts in this organizational directory only(이 조직 디렉터리의 계정만)를 선택합니다.
새 애플리케이션을 등록하려면 Register(등록)를 클릭합니다.
애플리케이션(클라이언트) ID를 기록해 둡니다. 연결 생성 시 이 ID를 제공해야 합니다.
Terraform
Terraform 구성 파일에 다음을 추가합니다.
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false }
자세한 내용은 Azure에서 애플리케이션을 등록하는 방법을 참조하세요.
연결 만들기
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
추가 메뉴에서 외부 데이터 소스를 선택합니다.
외부 데이터 소스 창에서 다음 정보를 입력합니다.
- 연결 유형으로 Azure 기반 BigLake(BigQuery Omni를 통해 연결)를 선택합니다.
- 연결 ID에는 연결 리소스의 식별자를 입력합니다. 문자, 숫자, 대시, 밑줄을 사용할 수 있습니다.
- 연결을 만들려는 위치를 선택합니다.
- (선택사항) 별칭에 사용자 친화적인 연결 이름(예:
My connection resource
)을 입력합니다. 사용자 친화적인 이름으로 나중에 수정해야 하는 경우 연결 리소스를 식별하는 데 도움이 되는 모든 값을 사용할 수 있습니다. - (선택사항) 설명에 연결 리소스에 대한 설명을 입력합니다.
- Azure 테넌트 ID에 디렉터리(테넌트) ID라고도 하는 Azure 테넌트 ID를 입력합니다.
제휴 ID 사용 체크박스를 사용 설정한 후 Azure 제휴 애플리케이션(클라이언트) ID를 입력합니다.
Azure ID를 가져오는 방법은 Azure 테넌트에서 애플리케이션 만들기를 참조하세요.
연결 만들기를 클릭합니다.
연결로 이동을 클릭합니다.
연결 정보 섹션에서 서비스 계정 ID인 BigQuery Google ID 값을 확인합니다. 이 ID는 애플리케이션 액세스를 승인하는 Google Cloud 서비스 계정의 ID입니다.
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "omni-azure-connection" location = "azure-eastus2" description = "created by terraform" azure { customer_tenant_id = "TENANT_ID" federated_application_client_id = azuread_application.example.application_id } }
TENANT_ID
를 Blob Storage 계정이 포함된 Azure 디렉터리의 테넌트 ID로 바꿉니다.
bq
bq mk
명령어를 사용합니다. 출력을 JSON 형식으로 가져오려면 --format=json
매개변수를 사용합니다.
bq mk --connection --connection_type='Azure' \ --tenant_id=TENANT_ID \ --location=AZURE_LOCATION \ --federated_azure=true \ --federated_app_client_id=APP_ID \ CONNECTION_ID
다음을 바꿉니다.
TENANT_ID
: Azure Storage 계정이 포함된 Azure 디렉터리의 테넌트 IDAZURE_LOCATION
: Azure Storage 데이터가 있는 Azure 리전. BigQuery Omni는azure-eastus2
리전을 지원합니다.APP_ID
: Azure 애플리케이션(클라이언트) ID. 이 ID를 가져오는 방법은 Azure 테넌트에서 애플리케이션 만들기를 참조하세요.CONNECTION_ID
: 연결의 이름
출력은 다음과 비슷합니다.
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
이 출력에는 다음 값이 포함됩니다.
APP_ID
: 사용자가 만든 애플리케이션의 IDSUBJECT_ID
: 사용자가 자신의 애플리케이션에 액세스하도록 승인한 Google Cloud 서비스 계정의 ID. Azure에서 제휴 사용자 인증 정보를 만들 때 이 값이 필요합니다.
다음 단계에서 사용할 APP_ID
및 SUBJECT_ID
값을 기록해둡니다.
그런 다음 애플리케이션의 제휴 사용자 인증 정보를 추가합니다.
제휴 사용자 인증 정보 추가
제휴 사용자 인증 정보를 만들려면 다음 단계를 수행합니다.
Azure 포털
Azure 포털에서 App registrations(앱 등록)로 이동한 다음 애플리케이션을 클릭합니다.
Certificates & secrets(인증서 및 보안 비밀) > Federated credentials(제휴 사용자 인증 정보) > Add credentials(사용자 인증 정보 추가)를 선택합니다. 그런 후 다음 작업을 수행합니다.
Federated credential scenario(제휴 사용자 인증 정보 시나리오) 목록에서 Other issuer(다른 발급기관)를 선택합니다.
Issuer(발급기관)에
https://accounts.google.com
을 입력합니다.Subject identifier(제목 식별자)에 연결 생성 시 가져온 Google Cloud 서비스 계정의 BigQuery Google ID를 입력합니다.
Name(이름)에 사용자 인증 정보의 이름을 입력합니다.
추가를 클릭합니다.
Terraform
Terraform 구성 파일에 다음을 추가합니다.
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false } resource "azuread_application_federated_identity_credential" "example" { application_object_id = azuread_application.example.object_id display_name = "omni-federated-credential" description = "BigQuery Omni federated credential" audiences = ["api://AzureADTokenExchange"] issuer = "https://accounts.google.com" subject = google_bigquery_connection.connection.azure[0].identity }
자세한 내용은 외부 ID 공급업체를 신뢰하도록 앱 구성을 참조하세요.
BigQuery의 Azure 애플리케이션에 역할을 할당합니다.
BigQuery의 Azure 애플리케이션에 역할을 할당하려면 Azure 포털, Azure PowerShell 또는 Microsoft Management REST API를 사용합니다.
Azure 포털
Microsoft.Authorization/roleAssignments/write
권한이 있는 사용자로 로그인하여 Azure 포털에서 역할 할당을 수행할 수 있습니다. 역할 할당을 통해 역할 정책에 지정된 대로 BigQuery Azure 연결로 Azure Storage 데이터에 액세스할 수 있습니다.
Azure 포털을 사용하여 역할 할당을 추가하려면 다음 단계를 수행합니다.
Azure Storage 계정의 검색창에
IAM
을 입력합니다.Access Control (IAM)(액세스 제어(IAM))을 클릭합니다.
Add(추가)를 클릭하고 Add role assignments(역할 할당 추가)를 선택합니다.
읽기 전용 액세스 권한을 제공하려면 Storage Blob Data Reader(스토리지 Blob 데이터 리더) 역할을 선택합니다. 읽기-쓰기 액세스 권한을 제공하려면 Storage Blob Data Contributor(스토리지 Blob 데이터 참여자) 역할을 선택합니다.
액세스 권한 지정을 사용자, 그룹 또는 서비스 주 구성원으로 설정합니다.
Select members(구성원 선택)를 클릭합니다.
Select(선택) 필드에 Azure 테넌트에서 애플리케이션을 만들 때 지정한 Azure 애플리케이션 이름을 입력합니다.
저장을 클릭합니다.
자세한 내용은 Azure 포털을 사용한 Azure 역할 할당을 참조하세요.
Terraform
Terraform 구성 파일에 다음을 추가합니다.
resource "azurerm_role_assignment" "data-role" { scope = data.azurerm_storage_account.example.id # Read permission for Omni on the storage account role_definition_name = "Storage Blob Data Reader" principal_id = azuread_service_principal.example.id }
Azure PowerShell
리소스 범위에서 서비스 주 구성원에 역할 할당을 추가하려면 New-AzRoleAssignment
명령어를 사용하면 됩니다.
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
다음을 바꿉니다.
APP_NAME
: 애플리케이션의 이름입니다.ROLE_NAME
: 할당하려는 역할 이름입니다.RESOURCE_NAME
: 리소스 이름입니다.RESOURCE_TYPE
: 리소스 유형입니다.PARENT_RESOURCE
: 상위 리소스입니다.RESOURCE_GROUP_NAME
: 리소스 그룹 이름입니다.
Azure PowerShell을 사용하여 새 서비스 주 구성원을 추가하는 방법에 대한 자세한 내용은 Azure PowerShell을 사용한 Azure 역할 할당을 참조하세요.
Azure CLI
리소스 범위에서 서비스 주 구성원에 대해 역할 할당을 추가하려면 Azure 명령줄 도구를 사용하면 됩니다. 스토리지 계정에 역할을 부여하려면 Microsoft.Authorization/roleAssignments/write
권한이 있어야 합니다.
스토리지 Blob 데이터 리더 역할과 같은 역할을 서비스 주 구성원에게 할당하려면 az role assignment create
명령어를 실행합니다.
az role assignment create --role "Storage Blob Data Reader" \ --assignee-object-id ${SP_ID} \ --assignee-principal-type ServicePrincipal \ --scope subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME
다음을 바꿉니다.
SP_ID
: 서비스 주 구성원 ID입니다. 이 서비스 주 구성원은 생성한 애플리케이션을 위한 것입니다. 제휴 연결의 서비스 주 구성원을 가져오려면 서비스 주 구성원 객체를 참조하세요.STORAGE_ACCOUNT_NAME
: 스토리지 계정 이름입니다.RESOURCE_GROUP_NAME
: 리소스 그룹 이름입니다.SUBSCRIPTION_ID
: 구독 ID입니다.
자세한 내용은 Azure CLI를 사용한 Azure 역할 할당을 참조하세요.
Microsoft REST API
서비스 주 구성원에 대해 역할 할당을 추가하려면 Microsoft Management에 HTTP 요청을 전송하면 됩니다.
Microsoft Graph REST API를 호출하려면 애플리케이션의 OAuth 토큰을 검색합니다. 자세한 내용은 사용자 없이 액세스 권한 가져오기를 참조하세요.
Microsoft Graph REST API를 호출한 애플리케이션에는 Application.ReadWrite.All
애플리케이션 권한이 있어야 합니다.
OAuth 토큰을 생성하려면 다음 명령어를 실행합니다.
export TOKEN=$(curl -X POST \ https://login.microsoftonline.com/TENANT_ID/oauth2/token \ -H 'cache-control: no-cache' \ -H 'content-type: application/x-www-form-urlencoded' \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "resource=https://graph.microsoft.com/" \ --data-urlencode "client_id=CLIENT_ID" \ --data-urlencode "client_secret=CLIENT_SECRET" \ | jq --raw-output '.access_token')
다음을 바꿉니다.
TENANT_ID
: Azure Storage 계정이 포함된 Azure 디렉터리의 ID와 일치하는 테넌트 IDCLIENT_ID
: Azure 클라이언트 IDCLIENT_SECRET
: Azure 클라이언트 보안 비밀번호
서비스 주 구성원에게 할당하려는 Azure 기본 제공 역할의 ID를 가져옵니다.
일반적인 역할은 다음과 같습니다.
- 스토리지 Blob 데이터 참여자:
ba92f5b4-2d11-453d-a403-e96b0029c9fe
- 스토리지 Blob 데이터 리더:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
서비스 주 구성원에 역할을 할당하려면 Microsoft Graph REST API를 Azure Resource Management REST API에 호출합니다.
export ROLE_ASSIGNMENT_ID=$(uuidgen) curl -X PUT \ 'https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID?api-version=2018-01-01-preview' \ -H "authorization: Bearer ${TOKEN?}" \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "properties": { "roleDefinitionId": "subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleDefinitions/ROLE_ID", "principalId": "SP_ID" } }'
다음을 바꿉니다.
ROLE_ASSIGNMENT_ID
: 역할 ID입니다.SP_ID
: 서비스 주 구성원 ID입니다. 이 서비스 주 구성원은 생성한 애플리케이션을 위한 것입니다. 제휴 연결의 서비스 주 구성원을 가져오려면 서비스 주 구성원 객체를 참조하세요.SUBSCRIPTION_ID
: 구독 ID입니다.RESOURCE_GROUP_NAME
: 리소스 그룹 이름입니다.STORAGE_ACCOUNT_NAME
: 스토리지 계정 이름입니다.SUBSCRIPTION_ID
: 구독 ID입니다.
이제 연결을 사용할 수 있습니다. 그러나 Azure에서 역할 할당의 전파가 지연될 수 있습니다. 권한 문제로 인해 연결을 사용할 수 없다면 잠시 후에 다시 시도하세요.
사용자와 연결 공유
데이터를 쿼리하고 연결을 관리할 수 있도록 사용자에게 다음 역할을 부여할 수 있습니다.
roles/bigquery.connectionUser
: 사용자가 연결을 사용하여 외부 데이터 소스에 연결하고 쿼리를 실행할 수 있습니다.roles/bigquery.connectionAdmin
: 사용자가 연결을 관리할 수 있습니다.
BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
이러한 연결은 프로젝트의 외부 연결 그룹에 나열됩니다.
탐색기 창에서 프로젝트 이름 > 외부 연결 > 연결을 클릭합니다.
세부정보 창에서 공유를 클릭하여 연결을 공유합니다. 다음 작업을 수행합니다.
연결 권한 대화상자에서 주 구성원을 추가하거나 수정하여 다른 주 구성원과 연결을 공유합니다.
저장을 클릭합니다.
bq
bq 명령줄 도구로 연결을 공유할 수 없습니다. 연결을 공유하려면 Google Cloud 콘솔 또는 BigQuery Connections API 메서드를 사용하여 연결을 공유합니다.
API
BigQuery 연결 REST API 참조 섹션의 projects.locations.connections.setIAM
메서드를 사용하고 policy
리소스의 인스턴스를 지정합니다.
Java
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 단계
- 다양한 연결 유형 알아보기
- 연결 관리 알아보기
- BigQuery Omni 자세히 알아보기
- BigLake 테이블 알아보기
- Blob Storage 데이터 쿼리 방법 알아보기
- 쿼리 결과를 Blob Storage로 내보내는 방법 알아보기