AWS Glue용 테두리 없는 Lakehouse 설정

이 문서에서는 Google Cloud내에서 AWS Glue 카탈로그의 데이터를 직접 쿼리할 수 있도록 테두리 없는 Lakehouse를 설정하는 방법을 설명합니다. 이 기능을 사용하면 외부 데이터 소스를 기존 Google Cloud 환경과 통합하여 데이터 분석을 통합할 수 있습니다.

그런 다음 Lakehouse for Apache Iceberg를 사용하여 페더레이션 데이터에 대한 액세스를 관리할 수 있습니다.

시작하기 전에

  1. 레이크하우스 개요를 검토하여 레이크하우스가 데이터 액세스를 관리하는 방법을 파악합니다.
  2. 작동 방식을 이해하려면 경계 없는 레이크하우스 정보를 읽어보세요.
  3. 지원되는 카탈로그를 검토하여 표 형식 요구사항과 지원되는 구성을 확인합니다.
  4. AWS 관리자에게 Identity and Access Management (IAM) 역할을 만들고 권한 정책을 구성할 권한이 있는지 확인합니다.
  5. 선택사항: Google Cloud VPC와 원격 클라우드 제공업체의 VPC(예: AWS) 간의 비공개 인터커넥트를 통해 쿼리를 라우팅하려는 경우 원격 제공업체의 활성 계정이 있고, 전용 크로스 클라우드 인터커넥트 또는 파트너 크로스 클라우드 인터커넥트를 프로비저닝하고, Cloud Router와 BGP 세션을 설정하고, 두 클라우드 환경 모두에 필요한 IAM 권한이 있는지 확인합니다.
  6. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

필요한 역할

보더리스 레이크하우스를 설정하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

제한사항 및 고려사항

이 섹션에는 경계 없는 Lakehouse 사용에 관한 제한사항과 고려사항이 나와 있습니다.

  • 지원되는 클라우드 제공업체: 테두리 없는 Lakehouse와 함께 비공개 인터커넥트를 사용하는 것은 Amazon Web Services (AWS)와 같은 원격 클라우드 제공업체에서 지원됩니다. 전용 Cross-Cloud Interconnect 또는 파트너 Cross-Cloud Interconnect를 사용할 수 있습니다.
  • 네트워크 라우팅: 비공개 인터커넥트 (예: 전용 CCI 또는 파트너 CCI)가 구성되지 않은 경우 쿼리는 공개 인터넷을 통해 라우팅됩니다. 이로 인해 원격 클라우드 제공업체에서 이그레스 요금이 더 많이 청구되고 성능을 예측하기 어려워질 수 있습니다.
  • 데이터 최신성: 제휴 카탈로그의 --refresh-interval 플래그는 메타데이터가 동기화되는 빈도를 결정합니다. 간격이 짧을수록 최신 데이터가 제공되지만 원격 카탈로그 제공업체에서 추가 API 비용이 발생할 수 있습니다.
  • Iceberg 측정항목 보고: Iceberg 측정항목 보고는 페더레이션 카탈로그에서 사용할 수 없습니다. 제휴 카탈로그에 액세스할 때 Iceberg 클라이언트에서 rest-metrics-reporting-enabled 속성을 false로 설정합니다.

일반 워크플로

경계 없는 Lakehouse를 설정하고 사용하려면 다음 일반 단계를 따르세요.

  • Cross-Cloud Interconnect 설정 (선택사항): Google Cloud VPC와 원격 클라우드 제공업체 간에 비공개 연결을 구성합니다.
  • 제휴 설정: 원격 공급자와 자리표시자 신뢰 정책이 있는 IAM 역할을 만들어 인증을 구성합니다. 그런 다음 Lakehouse에서 제휴 카탈로그를 만들고 신뢰 정책을 업데이트합니다.
  • 연결 확인: Lakehouse가 원격 카탈로그에 연결할 수 있는지 확인합니다.
  • 데이터 쿼리: BigQuery 또는 Managed Service for Apache Spark를 사용하여 통합 데이터에 대해 쿼리를 실행합니다. 자세한 내용은 테두리 없는 Lakehouse 사용을 참고하세요.
  • 권한 구성: IAM을 사용하여 통합 데이터를 보고 쿼리할 수 있는 사용자를 관리합니다.

Cross-Cloud Interconnect 설정 (선택사항)

원격 카탈로그에 대한 쿼리는 기본적으로 공개 인터넷을 통해 이동합니다. 보안 및 규정 준수를 강화하고, 예측 가능한 성능을 제공하고, 데이터 전송 비용을 줄이려면 비공개 인터커넥트를 사용하세요. 이렇게 하면 Google Cloud가상 프라이빗 클라우드 (VPC)와 원격 클라우드 제공업체의 네트워크 (예: AWS) 간에 전용 비공개 네트워크 연결이 설정됩니다.

Google Cloud VPC와 원격 클라우드 제공업체의 VPC(예: AWS) 간에 다음 비공개 인터커넥트 옵션 중 하나를 프로비저닝하고 구성할 수 있습니다.

경로 교환을 위해 Google Cloud 의 Cloud Router와 원격 클라우드 제공업체의 VPC 간에 BGP 세션을 설정합니다.

비공개 쿼리를 사용 설정하려면 비공개 상호 연결을 통해 Lakehouse에서 원격 스토리지 버킷 (예: AWS Amazon S3 버킷)으로의 경로를 구성해야 합니다. 이 라우팅을 구성하기 위해 따를 수 있는 두 가지 아키텍처 흐름이 있습니다.

  • 내부 리전 프록시 네트워크 부하 분산기 라우팅: 이 흐름에서는Google Cloud 내부 리전 프록시 네트워크 부하 분산기를 사용하여 여러 AWS 탄력적 네트워크 인터페이스 (ENI)를 가리키는 하이브리드 연결 네트워크 엔드포인트 그룹 (NEG)에 요청을 분산합니다. 이 흐름은 부하 분산, 확장성, 고가용성에 필수적입니다. 파트너 CCI에는 필요하고 전용 CCI에는 부하 분산, 확장성, 고가용성을 위해 권장됩니다.
  • 직접 엔드포인트 라우팅: 이 흐름은 서비스 디렉터리를 단일 AWS 인터페이스 VPC 엔드포인트 IP 주소에 직접 연결합니다. 이 흐름은 전용 CCI에만 적용되며 파트너 CCI에는 지원되지 않습니다.

아키텍처 요구사항에 맞는 구성 흐름을 선택합니다.

내부 리전 프록시 네트워크 부하 분산기

고가용성 및 부하 분산을 위해 여러 AWS ENI에 요청을 분산하도록 내부 리전 프록시 네트워크 부하 분산기를 구성하려면 다음 단계를 따르세요.

AWS 네트워킹 구성

먼저 Amazon S3 VPC 인터페이스 엔드포인트 (AWS PrivateLink)를 만듭니다.

  1. AWS VPC 콘솔에서 Amazon S3용 인터페이스 엔드포인트를 만듭니다.
  2. 서비스 이름으로 com.amazonaws.AWS_REGION.s3를 지정합니다.
  3. Direct Connect를 통해 Google Cloud VPC에 연결된 VPC 및 서브넷을 선택합니다.
  4. 인바운드 액세스를 제어하기 위해 엔드포인트에 보안 그룹을 연결합니다.
  5. 이렇게 하면 선택한 각 서브넷에 탄력적 네트워크 인터페이스 (ENI)가 프로비저닝됩니다. 이러한 ENI의 비공개 IP 주소를 확인합니다.

다음으로 보안 그룹을 구성합니다.

  • Amazon S3 엔드포인트 ENI에 연결된 보안 그룹이 Google Cloud VPC에서 포트 443의 인바운드 TCP 트래픽을 허용하는지 확인합니다. 여기에는 상태 점검과 전달된 트래픽을 허용하는Google Cloud 프록시 전용 서브넷의 CIDR 범위가 포함되어야 합니다.

네트워킹 Google Cloud 구성

설정을 간소화하려면 다음 명령어를 실행하여 내부 부하 분산기를 구성하세요. 고급 구성 또는 자세한 내용은 하이브리드 엔드포인트용 내부 리전 프록시 네트워크 부하 분산기 설정을 참고하세요.

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

다음을 바꿉니다.

  • PROXY_SUBNET_NAME: 프록시 전용 서브넷의 이름입니다.
  • PROXY_SUBNET_RANGE: VPC 네트워크 내에서 사용되지 않는 CIDR 범위 (예: 10.129.0.0/23)
  1. 리전 상태 점검을 만듭니다.

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    다음을 바꿉니다.

    • HEALTH_CHECK_NAME: 상태 점검의 이름입니다.
    • REGION: Google Cloud 리전 (예: us-east4)
  2. 하이브리드 연결 네트워크 엔드포인트 그룹 (NEG)을 만들고 엔드포인트를 추가합니다.

    각 영역에 대해 하이브리드 NEG (NON_GCP_PRIVATE_IP_PORT)를 만듭니다.

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    AWS ENI의 비공개 IP 주소를 해당 하이브리드 NEG에 추가합니다.

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    다음을 바꿉니다.

    • NEG_NAME: 하이브리드 NEG의 이름입니다.
    • ZONE: Google Cloud 영역 (예: us-east4-a). 이 영역은 Cross-Cloud Interconnect VLAN 연결의 리전 내에 있어야 합니다.
    • VPC_NETWORK: VPC 네트워크의 이름입니다.
    • AWS_S3_IP: 해당 영역에 있는 AWS Amazon S3 VPC 엔드포인트 (ENI)의 비공개 IP 주소입니다.

    AWS ENI가 여러 영역에 분산되어 있는 경우 이 명령어를 반복하여 다른 영역의 NEG를 만들고 엔드포인트를 추가합니다.

  3. 백엔드 서비스를 만들고 구성합니다.

    내부 관리형 부하 분산을 사용하여 리전 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    하이브리드 NEG를 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
    • NEG_NAME: 이전 단계에서 만든 하이브리드 NEG의 이름입니다.
    • ZONE: Google Cloud 영역 (예: us-east4-a)
    • MAX_CONNECTIONS: 백엔드에서 처리해야 하는 최대 동시 연결 수입니다 (예: 100).

    생성한 각 하이브리드 NEG에 대해 add-backend 명령어를 반복합니다.

  4. 부하 분산기 프런트엔드를 구성합니다.

    대상 TCP 프록시를 만듭니다.

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    대상 프록시로 트래픽을 라우팅하는 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    다음을 바꿉니다.

    • TARGET_PROXY_NAME: 대상 프록시의 이름입니다.
    • FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
    • VPC_SUBNET: VPC 서브네트워크의 이름입니다.

부하 분산기의 전달 규칙을 만든 후 부하 분산기에 할당된 내부 IP 주소를 확인합니다. ILB_IP_ADDRESS입니다.

서비스 디렉터리 구성

Lakehouse가 검색할 수 있도록 서비스 디렉터리에 ILB의 IP 주소를 등록합니다.

  1. 원격 클라우드의 네임스페이스를 만듭니다.

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스의 고유 식별자입니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • REGION: Google Cloud 리전입니다. 예를 들면 us-east4입니다. 이 리전은 제휴 카탈로그와 동일한 리전이어야 합니다.
  2. 서비스 디렉터리 네임스페이스에서 서비스를 만듭니다.

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    다음을 바꿉니다.

    • SERVICE_NAME: 서비스의 고유 식별자입니다.
  3. 서비스에서 ILB의 엔드포인트를 만듭니다.

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    다음을 바꿉니다.

    • ENDPOINT_NAME: 엔드포인트의 고유 식별자입니다.
    • PROJECT_NUMBER: Google Cloud프로젝트 번호 --network 플래그에 프로젝트 번호를 사용합니다.
    • ILB_IP_ADDRESS: ILB 전달 규칙의 내부 IP 주소입니다.

직접 엔드포인트

트래픽을 단일 AWS 인터페이스 VPC 엔드포인트 IP 주소로 직접 라우팅하도록 서비스 디렉터리를 구성하려면 다음 단계를 따르세요.

  1. AWS VPC 내에서 Amazon S3용 인터페이스 VPC 엔드포인트를 만듭니다. 이 엔드포인트의 IP 주소와 포트를 기록해 둡니다.
  2. 원격 클라우드의 네임스페이스를 만듭니다.

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스의 고유 식별자입니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • REGION: Google Cloud 리전입니다. 예를 들면 us-east4입니다. 이 리전은 제휴 카탈로그와 동일한 리전이어야 합니다.
  3. 서비스 디렉터리 네임스페이스에서 서비스를 만듭니다.

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    다음을 바꿉니다.

    • SERVICE_NAME: 서비스의 고유 식별자입니다.
  4. Amazon S3 인터페이스 VPC 엔드포인트의 라우팅 정보가 포함된 서비스에 엔드포인트를 만듭니다.

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    다음을 바꿉니다.

    • ENDPOINT_NAME: 엔드포인트의 고유 식별자입니다.
    • S3_VPCE_IP_ADDRESS: Amazon S3 인터페이스 VPC 엔드포인트의 IP 주소입니다. 예를 들면 10.0.1.45입니다.
    • S3_VPCE_PORT: Amazon S3 인터페이스 VPC 엔드포인트의 포트 번호입니다. 예를 들면 443입니다.
    • PROJECT_NUMBER: Google Cloud프로젝트 번호 --network 플래그에 프로젝트 번호를 사용합니다.
    • VPC_NETWORK: 비공개 인터커넥트와 연결된 Google Cloud VPC 네트워크 이름입니다.

제휴 설정

데이터를 쿼리하려면 원격 AWS 카탈로그에 연결되는 Lakehouse 제휴 카탈로그를 설정하세요.

자리표시자 트러스트 정책으로 AWS IAM 역할 만들기

Lakehouse는 카탈로그 생성 후 Google 서비스 계정 ID를 프로비저닝합니다. 자리표시자 트러스트 정책으로 AWS IAM 역할을 만듭니다.

  1. trust_policy.json이라는 파일을 만듭니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": [
                "PLACEHOLDER_VALUE"
              ],
              "accounts.google.com:sub": [
                "PLACEHOLDER_VALUE"
              ]
            }
          }
        }
      ]
    }
  2. AWS CLI 명령어를 실행하여 자리표시자 신뢰 정책으로 역할을 만듭니다. 장기 실행 작업 중에 사용자 인증 정보가 만료되지 않도록 최대 세션 시간을 12시간 (43200초)으로 설정하는 것이 좋습니다.

    aws iam create-role \
      --role-name AWS_ROLE_NAME \
      --assume-role-policy-document file://trust_policy.json \
      --max-session-duration 43200

    다음을 바꿉니다.

    • AWS_ROLE_NAME: AWS IAM 역할의 이름입니다. 예를 들면 lakehouse_glue_federation_role입니다.

권한 정책 연결

Lakehouse가 AWS 리전의 Glue Data Catalog 및 S3 버킷에 액세스할 수 있도록 권한 정책을 IAM 역할에 연결합니다. 이 정책은 AWS Lake Formation S3 테이블 통합을 사용하는 경우 S3 테이블 버킷에 대한 액세스 권한도 부여합니다. 기본 AWS Glue 데이터 권한에서 AWS Lake Formation 모델로 업그레이드한 경우 Lake Formation에서 추가 권한을 부여해야 할 수 있습니다.

  1. 다음 정책 구성으로 permissions_policy.json이라는 파일을 만듭니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GlueRead",
          "Effect": "Allow",
          "Action": [
            "glue:GetCatalog",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetTables"
          ],
          "Resource": "arn:aws:glue:AWS_REGION:AWS_ACCOUNT_ID:*"
        },
        {
          "Sid": "S3Read",
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::*"
          ]
        },
        {
          "Sid": "S3TablesRead",
          "Effect": "Allow",
          "Action": [
            "s3tables:GetTableBucket",
            "s3tables:ListNamespaces",
            "s3tables:GetNamespace",
            "s3tables:ListTables",
            "s3tables:GetTable",
            "s3tables:GetTableMetadataLocation",
            "s3tables:GetTableData"
          ],
          "Resource": [
            "arn:aws:s3tables:AWS_REGION:AWS_ACCOUNT_ID:*"
          ]
        }
      ]
    }

    AWS Key Management Service(KMS)에 호스팅된 고객 관리 키를 사용하여 AWS Glue, Amazon S3 또는 Amazon S3 테이블 리소스를 암호화하는 경우 리소스를 복호화할 KMS 키 액세스 권한을 부여하는 문을 추가해야 합니다.

    # ...
    {
      "Sid": "GlueS3S3TablesKmsDecrypt",
      "Effect": "Allow",
      "Action": [
          "kms:Decrypt"
      ],
      "Resource": [
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_glue",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3_tables"
      ]
    }
    # ...
  2. 이 권한 정책을 IAM 역할에 연결합니다.

    aws iam put-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-name AWS_POLICY_NAME \
      --policy-document file://permissions_policy.json

    다음을 바꿉니다.

    • AWS_ROLE_NAME: AWS IAM 역할의 이름 예를 들면 lakehouse_glue_federation_role입니다.
    • AWS_POLICY_NAME: 권한 정책의 이름입니다. 예를 들면 lakehouse_glue_federation_policy입니다.
    • AWS_REGION: Glue 카탈로그 또는 S3 테이블이 있는 AWS 리전입니다. 예를 들면 us-east-1입니다.
    • AWS_ACCOUNT_ID: 12자리 AWS 계정 ID 문자열입니다. 예를 들면 123456789012입니다.

제휴 카탈로그 만들기

Google Cloud 콘솔, gcloud CLI 또는 REST API를 사용하여 Google Cloud 에 연합 카탈로그를 설정합니다.

AWS 신뢰 관계가 전파되는 동안 백그라운드 메타데이터 새로고침이 조기에 실패하지 않도록 하려면 새로고침 일정을 지정하지 않고 (기본값은 0s) 카탈로그를 초기화하세요.

콘솔

제휴 카탈로그를 만들려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Lakehouse로 이동합니다.

    레이크하우스로 이동

  2. 카탈로그 만들기를 클릭합니다.

  3. 제휴 카탈로그를 클릭합니다.

    카탈로그 구성 세부정보가 표시됩니다.

  4. 제휴 카탈로그 소스에서 AWS Glue를 선택합니다.

  5. 데이터 위치에서 페더레이션 카탈로그를 만들 Lakehouse 리전을 선택합니다. 예를 들면 us-east4입니다. 지연 시간을 최소화하려면 (공용 인터넷을 사용하는 경우에도) Google Cloud AWS 리전과 가장 가까운 리전을 선택하세요.

  6. 계속을 클릭합니다.

    연결 세부정보가 표시됩니다.

  7. 원격 카탈로그 세부정보 섹션의 AWS 창고 필드에 AWS 계정 ID 또는 S3 테이블 버킷 카탈로그를 입력합니다. 예를 들면 123456789012입니다.

  8. AWS 리전 필드에 AWS 리전을 입력합니다. 예를 들면 us-east-1입니다.

  9. AWS 역할 ARN 필드에 AWS 역할 ARN을 입력합니다. arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME 형식을 사용합니다.

  10. (선택사항) 서비스 디렉터리 이름 필드에 서비스 디렉터리 엔드포인트 또는 서비스의 경로를 입력합니다. 비공개 상호 연결 (Cross-Cloud Interconnect)을 구성하는 경우에만 필요합니다.

  11. 만들기를 클릭합니다.

Google Cloud CLI

공개 인터넷 (CCI 없음)

CCI를 구성하지 않으면 연결이 공개 인터넷을 통해 안전하게 이동합니다.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="glue" \
    --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \
    --glue-aws-region="AWS_REGION" \
    --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"

고객 소유 (CCI)

전용 CCI 또는 파트너 CCI와 같은 비공개 상호 연결을 구성한 경우 Lakehouse가 비공개로 트래픽을 라우팅하도록 서비스 디렉터리 서비스 참조를 제공합니다.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="glue" \
    --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \
    --glue-aws-region="AWS_REGION" \
    --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"

REST

curl -s -X POST \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION" \
  -d '{
    "catalog_type": "CATALOG_TYPE_FEDERATED",
    "storage_regions": ["'"REGION"'"],
    "federated_catalog_options": {
      "glue_catalog_info": {
        "warehouse": "'"GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE"'",
        "aws_region": "'"AWS_REGION"'",
        "aws_role_arn": "arn:aws:iam::'"AWS_ACCOUNT_ID"':role/'"AWS_ROLE_NAME"'"
      }
    }
  }'

다음을 바꿉니다.

  • FEDERATED_CATALOG_NAME: 통합 카탈로그의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REGION: 제휴 카탈로그가 생성되는 Lakehouse 리전입니다. 예를 들면 us-east4입니다.
  • GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE: 타겟 창고 카탈로그 식별자입니다. AWS 리전의 Glue Data Catalog의 경우 12자리 AWS 계정 ID 문자열을 입력합니다. 예를 들면 123456789012입니다. 리전에서 S3 테이블 버킷을 사용하려면 AWS_ACCOUNT_ID:s3tablescatalog/S3_TABLE_BUCKET를 입력합니다. 예를 들면 123456789012:s3tablescatalog/my-table-bucket입니다.
  • AWS_ACCOUNT_ID: 12자리 AWS 계정 ID 문자열입니다. 예를 들면 123456789012입니다.
  • AWS_REGION: Glue 카탈로그 또는 S3 테이블 버킷이 있는 AWS 리전입니다. 예를 들면 us-east-1입니다.
  • AWS_ROLE_NAME: AWS IAM 역할의 이름입니다. 예를 들면 lakehouse_glue_federation_role입니다.
  • NAMESPACE: (선택사항) 비공개 Interconnect 설정 중에 만든 서비스 디렉터리 네임스페이스입니다.
  • SERVICE_NAME: (선택사항) 비공개 Interconnect 설정 중에 만든 서비스 디렉터리 서비스 이름입니다.

트러스트 정책 업데이트

카탈로그가 생성되면 Lakehouse에서 카탈로그에 고유한 서비스 계정을 프로비저닝하며, 이 계정은 카탈로그 생성 응답에서 biglake-service-account-id 필드로 반환됩니다. 이 서비스 계정을 사용하여 신뢰 관계를 설정합니다.

  1. 다음 명령어를 실행하여 biglake-service-account-id 값을 활성 bash 변수로 추출합니다.

    LAKEHOUSE_SA_ID=$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --format="value(biglake-service-account-id)")
  2. AWS IAM 역할의 신뢰 정책을 업데이트하여 자리표시자를 인증된 Google 서비스 에이전트 ID로 바꿉니다. 조건 블록은 subaud 일치를 모두 검사합니다. trust_policy_comprehensive.json이라는 파일에 정책을 작성합니다.

    cat > trust_policy_comprehensive.json << EOF
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": [
                "$LAKEHOUSE_SA_ID"
              ],
              "accounts.google.com:sub": [
                "$LAKEHOUSE_SA_ID"
              ]
            }
          }
        }
      ]
    }
    EOF
  3. 최종 정책을 AWS 역할에 적용합니다.

    aws iam update-assume-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-document file://trust_policy_comprehensive.json

백그라운드 메타데이터 새로고침 사용 설정

이제 두 플랫폼에서 보안 트러스트 관계가 성공적으로 설정되었으므로 카탈로그를 업데이트하여 백그라운드 메타데이터 새로고침 (5분 또는 300s 이상)을 활성화합니다.

gcloud CLI

gcloud alpha biglake iceberg catalogs update FEDERATED_CATALOG_NAME \
  --project="PROJECT_ID" \
  --refresh-interval="300s"

REST

curl -s -X PATCH \
-H "x-goog-user-project: PROJECT_ID" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME?updateMask=federated_catalog_options.refresh_options.refresh_schedule" \
-d '{
  "federated_catalog_options": {
    "refresh_options": {
      "refresh_schedule": {
        "refresh_interval": "300s"
      }
    }
  }
}'

비공개 인터커넥트 설정 완료 (Cross-Cloud Interconnect만 해당)

비공개 인터커넥트 (전용 또는 파트너 CCI)를 통해 트래픽을 라우팅하는 경우 Lakehouse 카탈로그 서비스 계정에 서비스 디렉터리를 통해 연결을 검색하고 승인할 권한을 부여해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. 액세스 권한 부여 (또는 추가)를 클릭합니다.

  3. 새 주 구성원 필드에 Lakehouse 카탈로그 서비스 계정 이메일을 입력합니다. 카탈로그를 설명하여 이 이메일을 검색할 수 있습니다 (gcloud 탭 참고).

  4. 역할 드롭다운에서 Service Directory 뷰어 (roles/servicedirectory.viewer)를 선택합니다.

  5. 다른 역할 추가를 클릭하고 Service Directory PSC Authorized Service (roles/servicedirectory.pscAuthorizedService)를 선택합니다.

  6. 저장을 클릭합니다.

gcloud CLI

카탈로그의 서비스 계정에 필요한 역할을 부여합니다.

# Grant Service Directory Viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.viewer"

# Grant Service Directory PSC Authorized Service
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.pscAuthorizedService"

연결 확인하기

카탈로그 백그라운드 메타데이터 새로고침 주기가 성공적으로 완료되고 네임스페이스가 동기화되었는지 확인합니다.

  1. 새로고침 상태가 성공을 나타내는지 확인합니다.

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID"
  2. 원격 데이터베이스가 동기화된 네임스페이스로 표시되는지 확인합니다.

    gcloud alpha biglake iceberg namespaces list \
      --project="PROJECT_ID" \
      --catalog="FEDERATED_CATALOG_NAME"

다음 단계