Cloud 감사 로그를 사용하여 Workflows 트리거(gcloud CLI)
이 빠른 시작에서는 BigQuery에서 Cloud 감사 로그 이벤트를 수신하는 Eventarc 트리거를 사용하여 워크플로를 실행하는 방법을 보여줍니다. BigQuery는 애플리케이션에 액세스하고 통합할 수 있는 공개 데이터 세트를 호스팅합니다. 트리거는 공개 데이터 세트를 쿼리하는 BigQuery 작업을 리슨하여 워크플로를 실행합니다. 그런 다음 이벤트를 런타임 인수로 대상 워크플로에 전달합니다.
Google Cloud CLI를 사용하여 이 빠른 시작을 완료할 수 있습니다.
- Workflows를 사용하여 이벤트에서 데이터를 추출하고 반환하는 워크플로를 만들고 배포합니다.
- BigQuery 작업을 Workflows 이벤트 수신자에 연결하는 Eventarc 트리거를 만듭니다.
- bq 명령줄 도구를 사용하여 BigQuery 작업을 실행해 이벤트를 생성합니다. 이 이벤트는 대상 워크플로에 런타임 인수로 전달됩니다.
- 워크플로 실행 출력에서 이벤트 데이터를 봅니다.
시작하기 전에
조직에서 정의한 보안 제약조건으로 인해 다음 단계를 완료하지 못할 수 있습니다. 문제 해결 정보는 제한된 Google Cloud 환경에서 애플리케이션 개발을 참조하세요.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
gcloud
구성요소를 업데이트합니다.gcloud components update
- 계정을 사용하여 로그인합니다.
gcloud auth login
- Compute Engine, Eventarc, Pub/Sub, Workflows API를 사용 설정합니다.
gcloud services enable \ compute.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ workflows.googleapis.com \ workflowexecutions.googleapis.com
- 이 빠른 시작에서 사용되는 구성 변수를 설정합니다.
export WORKFLOW_LOCATION=us-central1 export TRIGGER_LOCATION=us-central1 export PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID} gcloud config set workflows/location ${WORKFLOW_LOCATION} gcloud config set eventarc/location ${TRIGGER_LOCATION}
-
프로젝트 생성자에게는 기본 소유자 역할(
roles/owner
)이 부여됩니다. 기본적으로 Identity and Access Management(IAM) 역할에는 대부분의 Google Cloud리소스에 대한 전체 액세스에 필요한 권한이 포함되며, 이 단계를 건너뛸 수 있습니다.프로젝트 생성자가 아니면 프로젝트에서 적합한 주 구성원에 대해 필수 권한을 부여해야 합니다. 예를 들어 주 구성원은 Google 계정(최종 사용자)이거나 서비스 계정(애플리케이션 및 컴퓨팅 워크로드)일 수 있습니다. 자세한 내용은 이벤트 대상의 역할 및 권한 페이지를 참조하세요.
필수 권한
빠른 시작을 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Eventarc 관리자(
roles/eventarc.admin
) -
로그 뷰 접근자 (
roles/logging.viewAccessor
) -
프로젝트 IAM 관리자(
roles/resourcemanager.projectIamAdmin
) -
서비스 계정 관리자(
roles/iam.serviceAccountAdmin
) -
서비스 계정 사용자(
roles/iam.serviceAccountUser
) -
서비스 사용량 관리자(
roles/serviceusage.serviceUsageAdmin
) -
Workflows 관리자 (
roles/workflows.admin
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
-
Eventarc 관리자(
테스트 목적으로 Eventarc 트리거에 연결할 때 트리거의 ID를 나타내기 위해 Compute Engine 기본 서비스 계정을 기록해 둡니다. 이 서비스 계정은 Compute Engine을 사용하는 Google Cloud 서비스를 사용 설정하거나 사용한 후에 다음 이메일 형식으로 자동 생성됩니다.
PROJECT_NUMBER-compute@developer.gserviceaccount.com
여기에서
PROJECT_NUMBER
를 Google Cloud프로젝트 번호로 바꿉니다. Google Cloud 콘솔의 시작 페이지에서 또는 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.gcloud projects describe PROJECT_ID --format='value(projectNumber)'
프로덕션 환경의 경우 새 서비스 계정을 만들고 필요한 최소한의 권한을 포함하고 최소 권한 원칙을 따르는 하나 이상의 IAM 역할을 부여하는 것이 좋습니다.
- 프로젝트의 Eventarc 이벤트 수신자 역할(
roles/eventarc.eventReceiver
)을 Compute Engine 기본 서비스 계정에 부여하세요. 그려면 Eventarc 트리거가 이벤트 제공자로부터 이벤트를 수신할 수 있습니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- Compute Engine 기본 서비스 계정에 프로젝트에 대한 Workflows 호출자 역할(
roles/workflows.invoker
)을 부여하여 계정에 워크플로 실행을 트리거할 권한을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
- 워크플로가 Cloud Logging에 로그를 전송할 수 있도록 프로젝트에서 Compute Engine 기본 서비스 계정에 대해 Logging 로그 작성자 역할(
roles/logging.logWriter
)을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/logging.logWriter
- 2021년 4월 8일 이전에 Cloud Pub/Sub 서비스 에이전트를 사용 설정하여 인증된 Pub/Sub 푸시 요청을 지원한 경우 서비스 계정 토큰 생성자 역할(
roles/iam.serviceAccountTokenCreator
)을 서비스 에이전트에 부여합니다. 그렇지 않으면 기본적으로 이 역할이 부여됩니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
- 터미널 또는 Cloud Shell을 엽니다.
- 홈 디렉터리에
myFirstWorkflow.yaml
또는myFirstWorkflow.json
이라는 이름의 새 파일을 만듭니다. - 다음을 복사하여 새 파일에 붙여넣은 후 저장합니다.
YAML
main: params: [event] steps: - log_event: call: sys.log args: text: ${event} severity: INFO - extract_data: assign: - data: ${event.data.protoPayload} - return_data: return: data: ${data}
JSON
{ "main": { "params": [ "event" ], "steps": [ { "log_event": { "call": "sys.log", "args": { "text": "${event}", "severity": "INFO" } } }, { "extract_data": { "assign": [ { "data": "${event.data.protoPayload}" } ] } }, { "return_data": { "return": { "data": "${data}" } } } ] } }
- 워크플로 배포:
export MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
예시 워크플로의 JSON 버전을 복사한 경우
.yaml
을.json
으로 바꿉니다. BigQuery 이벤트를 필터링하는 트리거를 만듭니다.
gcloud eventarc triggers create events-cal-trigger \ --destination-workflow=${MY_WORKFLOW} \ --destination-workflow-location=${WORKFLOW_LOCATION} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=bigquery.googleapis.com" \ --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
그러면
events-cal-trigger
라는 트리거가 생성됩니다.Google Cloud 프로젝트에서 처음으로 Eventarc 트리거를 만들 때는 Eventarc 서비스 에이전트를 프로비저닝하는 데 시간이 지연될 수 있습니다. 이 문제는 일반적으로 트리거를 다시 만들면 해결할 수 있습니다. 자세한 내용은 권한 거부 오류를 참조하세요.
events-cal-trigger
이 성공적으로 생성되었는지 확인하려면 다음을 실행합니다.gcloud eventarc triggers describe events-cal-trigger --location=${TRIGGER_LOCATION}
출력에는 트리거 생성 시간과 위치가 나열되며 다음과 비슷하게 표시됩니다.
createTime: '2021-10-14T15:15:43.872360951Z' [...] name: projects/PROJECT_ID/locations/us-central1/triggers/events-cal-trigger
워크플로를 트리거하려면 공개 데이터 세트에 액세스하고 정보를 검색하는 BigQuery 작업을 실행합니다.
bq query --nouse_legacy_sql \ 'SELECT COUNT(*) FROM `bigquery-public-data`.samples.shakespeare'
생성된 이벤트는 페이로드 데이터를 워크플로 실행 결과로 반환하는 워크플로에 런타임 인수로 전달됩니다.
워크플로가 트리거되었는지 확인하려면 마지막 실행 2개를 나열합니다.
gcloud workflows executions list ${MY_WORKFLOW} --limit=2
BigQuery 작업으로 워크플로 실행이 두 개 트리거됩니다. 한 이벤트는 작업 변경을 의미하고 다른 이벤트는 작업 삽입 자체를 의미합니다. 출력에는 실행마다
SUCCEEDED
와 동일한NAME
및STATE
가 나열되며 다음과 비슷하게 표시됩니다.NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2 STATE: SUCCEEDED START_TIME: 2024-02-06T14:16:14.390549813Z END_TIME: 2024-02-06T14:16:14.870102511Z NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179 STATE: SUCCEEDED START_TIME: 2024-02-06T14:16:14.389882601Z END_TIME: 2024-02-06T14:16:14.829942525Z
출력에서
NAME
필드의a073ad6a-c76b-4437-8d39-2ab3ade289d2
는 워크플로 실행 ID입니다. 다음 단계에서 사용할 실행 ID를 복사합니다.실행 상태를 보려면 다음 명령어를 실행합니다.
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
WORKFLOW_EXECUTION_ID
를 BigQuery 작업이 완료된 시간에 해당하는 워크플로 실행 ID로 바꿉니다.출력은 다음과 비슷하게 표시됩니다.
argument: [...] duration: 0.277917625s endTime: '2024-02-06T14:16:14.870102511Z' name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2 result: '{"data": [...]}' startTime: '2024-02-06T14:16:14.390549813Z' state: SUCCEEDED
BigQuery 작업이 완료된
startTime
과 워크플로 실행의START_TIME
이 서로 일치하는지 확인합니다.- 만든 워크플로를 삭제합니다.
계속 진행할지 묻는 메시지가 표시되면gcloud workflows delete ${MY_WORKFLOW}
y
를 입력합니다. - 만든 트리거를 삭제합니다.
gcloud eventarc triggers delete events-cal-trigger
- 또는 Google Cloud 프로젝트를 삭제하여 비용 청구를 방지할 수 있습니다. Google Cloud 프로젝트를 삭제하면 해당 프로젝트 내에서 사용되는 모든 리소스에 대한 청구가 중단됩니다.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
워크플로 생성 및 배포
BigQuery 작업 완료로 HTTP 요청으로 워크플로를 트리거할 때 실행되는 워크플로를 만들고 배포합니다.
Eventarc 트리거 만들기
이벤트를 BigQuery에서 Workflows 대상으로 라우팅하는 Eventarc 트리거를 만들려면 gcloud eventarc triggers create
명령어를 실행합니다.
이벤트 생성 및 확인
bq 명령줄 도구를 사용하여 BigQuery 작업을 실행해 이벤트를 생성하고 워크플로를 트리거합니다.
Eventarc를 사용하여 Workflows 이벤트 수신자를 트리거한 BigQuery 이벤트를 성공적으로 생성했습니다.