엄격한 act-as 모드는 Dataform에서 다음 사용자 작업에 대한 추가 보안 검사를 사용 설정합니다.
- 저장소 만들기 또는 업데이트
- 워크플로 구성 만들기 또는 업데이트
- 워크플로 호출 만들기
- 출시 구성 업데이트
이 추가 보안 검사를 수행하려면 이러한 작업을 실행하는 사용자에게 워크플로를 실행하는 데 사용자 인증 정보가 사용되는 서비스 계정인 유효 서비스 계정에 대한 iam.serviceAccounts.actAs 권한이 있어야 합니다.
자세한 내용은
리소스에 서비스 계정 연결을 참조하세요.
엄격한 act-as 모드는 모든 저장소에 적용됩니다.
필요한 역할
이 문서의 태스크를 완료하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.
- 서비스 계정 사용자 (
roles/iam.serviceAccountUser) 커스텀 서비스 계정에 대한 -
Cloud Logging에서 로그 보기:
로그 뷰어 (
roles/logging.viewer) 프로젝트에 대한 -
사용자 또는 서비스 계정에 IAM 역할 부여:
서비스 계정 관리자 (
roles/iam.serviceAccountAdmin) 프로젝트에 대한
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
유효 서비스 계정의 act-as 권한 확인
Dataform 워크플로가 중단 없이 안전하게 실행되도록 하려면 워크플로에서 사용하는 서비스 계정에 대한 act-as 권한을 확인하는 것이 중요합니다. 이 섹션에서는 리소스의 유효 서비스 계정을 식별하고, 로깅을 사용하여 권한 문제를 확인한 후 발견된 문제를 해결하는 방법을 설명합니다.
유효 서비스 계정 확인
리소스 유형 및 다음 조건에 따라 워크플로를 실행하는 유효 서비스 계정을 확인할 수 있습니다.
| 리소스 유형 | 유효 서비스 계정 |
|---|---|
| 저장소 | 저장소에 대해 구성된 커스텀 서비스 계정입니다. 모든 저장소에는 커스텀 서비스 계정이 필요합니다. 이 서비스 계정은 |
| 워크플로 구성 | 새 워크플로 구성의 경우 워크플로 구성을 만들 때 선택한 커스텀 서비스 계정이 사용됩니다. 서비스 계정을 선택하지 않으면 저장소의 서비스 계정이 사용됩니다. |
| 워크플로 호출 | 컴파일 결과가 컴파일 결과에서 워크플로 호출을 만드는 경우 그렇지 않으면 기본적으로 저장소 수준에서 구성된 서비스 계정으로 설정됩니다. |
Cloud Logging에서 권한 문제 확인
보안을 강화하기 위해 Dataform은 Dataform 리소스에서 사용하는 서비스 계정에 iam.serviceAccounts.actAs 권한이 누락되었는지 확인합니다.
잠재적인 권한 문제를 포함한 이러한 검사 결과는 Cloud Logging에 기록됩니다. 이러한 로그를 정기적으로 검토하여 누락된 iam.serviceAccounts.actAs 권한을 식별하고 부여해야 합니다. 이러한 로그를 확인하면 Dataform 워크플로 및 구성이 중단 없이 계속 작동합니다.
Cloud Logging에서 로그 보기
콘솔에서 로그 탐색기 페이지로 이동합니다. Google Cloud
로그를 확인할 Google Cloud 프로젝트를 선택합니다.
쿼리 편집기를 사용하여 다음 옵션으로 Dataform
actAs로그를 필터링합니다.실패하여 조치가 필요한
actAs검사만 나열하려면 다음 쿼리를 사용합니다.logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = false모든
actAs검사를 나열하려면 다음 쿼리를 사용합니다.logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.쿼리 실행 을 클릭합니다.
로그 항목 해석
쿼리 결과에서 로그 항목을 펼쳐 다음 jsonPayload 필드를 확인합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
dryRunResult |
불리언 | true: 권한 검사를 통과했습니다.false: 검사에 실패했습니다. 호출자 주 구성원에 서비스 계정에 대한 iam.serviceAccounts.actAs 권한이 없습니다. |
caller |
문자열 | API 호출을 시작한 주 구성원 (사용자 또는 서비스 계정)의 이메일 주소입니다. |
serviceAccount |
문자열 | 호출자 주 구성원이 act-as를 시도한 서비스 계정입니다. 이 필드는 일반적으로 dryRunResult 필드가 false일 때 표시됩니다. |
apiMethod |
문자열 | 검사를 트리거한 Dataform API 메서드입니다(예: CreateWorkflowInvocation 또는 UpdateRepository). |
*_context |
객체 | 호출된 API 메서드와 관련된 리소스 이름이 포함된 객체입니다. 자세한 내용은 컨텍스트 객체를 참조하세요. |
컨텍스트 객체
로그 항목에는 jsonPayload 필드 내에 컨텍스트 객체가 포함되어 있습니다. 이 객체의
필드에는 관련된 Dataform 항목의 정규화된 Google Cloud 리소스
이름이 포함되어 있습니다. 이러한 이름은 다음 목록에 표시된 표준 구조를 따르므로 리소스를 정확하게 식별할 수 있습니다.
create_workflow_invocation_context: API 메서드가CreateWorkflowInvocation일 때 표시됩니다.workflowInvocation: 워크플로 호출의 리소스 이름입니다.- 리소스 이름의 형식은 다음과 같습니다.
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- 리소스 이름의 형식은 다음과 같습니다.
compilationResult또는workflowConfig: 호출에 사용된 소스의 리소스 이름입니다.compilationResult의 리소스 이름 형식은projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID입니다.workflowConfig의 리소스 이름 형식은 다음과 같습니다:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
create_repository_context또는update_repository_context: API 메서드가CreateRepository또는UpdateRepository일 때 표시됩니다.repository: Dataform 저장소의 리소스 이름입니다.- 리소스 이름의 형식은 다음과 같습니다.
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- 리소스 이름의 형식은 다음과 같습니다.
update_release_config_context: API 메서드가UpdateReleaseConfig일 때 표시됩니다.releaseConfig: 출시 구성의 리소스 이름입니다.- 리소스 이름의 형식은 다음과 같습니다.
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- 리소스 이름의 형식은 다음과 같습니다.
create_workflow_config_context또는update_workflow_config_context: API 메서드가CreateWorkflowConfig또는UpdateWorkflowConfig일 때 표시됩니다.workflowConfig: 워크플로 구성의 리소스 이름입니다.- 리소스 이름의 형식은 다음과 같습니다.
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- 리소스 이름의 형식은 다음과 같습니다.
문서화된 형식을 로깅 항목과 비교하려면 다음을 바꿉니다.
PROJECT_ID: 프로젝트의 고유 식별자입니다. Google CloudLOCATION_ID: Dataform 저장소가 있는 리전입니다.REPOSITORY_ID: Dataform 저장소의 사용자 정의 ID입니다. 저장소가 생성될 때 저장소에 지정된 이름입니다.COMPILATION_RESULT_ID: Dataform 컴파일 결과의 시스템 생성 고유 식별자입니다.RELEASE_CONFIG_ID: Dataform 출시 구성의 사용자 정의 ID입니다.WORKFLOW_CONFIG_ID: Dataform 워크플로 구성의 사용자 정의 ID입니다.
권한 문제 해결
로깅에서 식별된 권한 문제를 해결하려면 실패의 근본 원인을 파악한 후 해당 해결 단계를 따르세요.
누락된 act-as 권한 부여
dryRunResult 필드가 false인 로그 항목을 찾으면 다음을 수행합니다.
jsonPayload세부정보에서caller필드의 이메일 주소를 확인하여 보안 주체를 식별합니다.serviceAccount필드의 이메일 주소를 확인하여 서비스 계정을 식별합니다.호출자 주 구성원에게 서비스 계정으로 act-as를 수행할 권한이 있어야 하는지 확인합니다. 이 권한을 부여하면 호출자가 서비스 계정에서 보유한 권한을 사용할 수 있습니다.
액세스가 의도된 경우 대상 서비스 계정의 호출자 보안 주체에게 서비스 계정 사용자 역할(
roles/iam.serviceAccountUser)을 부여합니다. 자세한 내용은 필요한 IAM 역할 부여를 참조하세요.
역할을 부여한 후 이 호출자 및 서비스 계정 조합의 향후 로그에 dryRunResult: true가 표시됩니다.
프로젝트 간 서비스 계정 연결 처리
저장소와 유효 서비스 계정이 서로 다른 프로젝트에 있는 경우 서비스 계정으로 act-as를 수행하려는 요청이 iam.disableCrossProjectServiceAccountUsage 조직 정책 제약조건에 의해 차단될 수 있습니다.
이 문제를 해결하려면 프로젝트 간 서비스 계정 연결 사용 설정을 참조하세요.
필수 IAM 역할 부여
서비스 계정 사용자 역할
(roles/iam.serviceAccountUser)에는 엄격한 act-as 모드에 필요한 iam.serviceAccounts.actAs
권한이 포함되어 있습니다. Dataform API를 사용하는 경우 호출하는
projects.locations.repositories 메서드
를 기반으로 유효 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
create또는patchRepository.ServiceAccount속성이 설정된 경우 해당 속성에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.patch메서드를 호출하는 경우 저장소의 모든 워크플로 구성에 있는 모든 유효 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
workflowConfigs.create또는workflowConfigs.patch- 워크플로 구성에 사용되는 유효 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
releaseConfigs.patch- 이 출시 구성을 사용하여 워크플로 구성에 사용되는 모든 유효 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
workflowInvocations.create- 워크플로 호출에 사용되는 유효 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
커스텀 서비스 계정에 서비스 계정 사용자 역할을 부여하려면 다음 단계를 따르세요.
콘솔에서 IAM > 서비스 계정으로 이동합니다. Google Cloud
프로젝트를 선택합니다.
프로젝트 "PROJECT_NAME" 의 서비스 계정 페이지에서 커스텀 서비스 계정을 선택합니다.
액세스 권한이 있는 보안 주체로 이동한 다음 액세스 권한 부여를 클릭합니다.
새 주 구성원 필드에 기본 Dataform 서비스 에이전트 ID를 입력합니다.
기본 Dataform 서비스 에이전트 ID의 형식은 다음과 같습니다.
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comPROJECT_NUMBER를 Google Cloud 프로젝트 번호로 바꿉니다.역할 선택 목록에서 서비스 계정 사용자 역할을 선택합니다.
다른 역할 추가 를 클릭하고 서비스 계정 토큰 생성자 역할을 선택합니다.
저장 을 클릭합니다.
자세한 내용은 워크플로 구성을 만드는 데 필요한 역할 및 출시 구성을 만드는 데 필요한 역할을 참조하세요.
엄격한 act-as 모드가 자동 출시 및 실행에 미치는 영향
엄격한 act-as 모드는 자동 저장소 출시 및 자동 워크플로 실행에 다음과 같은 영향을 미칩니다.
서드 파티 저장소에 연결되지 않은 저장소의 경우:
- 출시 구성에서 자동 출시의
Cron 일정
을 설정할 수 없습니다. 이는 다운스트림 서비스 계정에 필요한
iam.serviceAccounts.actAs권한이 없을 수 있는 사용자가 변경한 코드가 자동으로 배포되지 않도록 하기 위해 적용됩니다. - 워크플로 구성에서 Cron 일정을 사용하는 예약된 워크플로 실행은 사용 설정된 상태로 유지됩니다. 이러한 자동 실행이 성공하려면 워크플로 구성에 지정된
유효 서비스 계정
에 기본
Dataform 서비스 에이전트의
iam.serviceAccounts.actAs권한을 부여해야 합니다.
서드 파티 저장소에 연결된 저장소 의 경우:
- 예약된 출시 및 예약된 워크플로 실행이 허용됩니다.
- 출시 구성에서 자동 출시를 사용 설정하거나 워크플로 구성에서 자동 실행을 사용 설정하려면 기본 Dataform 서비스 에이전트에게 관련 유효 서비스 계정에 대한
iam.serviceAccounts.actAs권한을 부여해야 합니다.- 자동 출시 구성의 경우 이 출시 구성에 의해 트리거되는 모든 워크플로 구성의 유효 서비스 계정에 권한을 부여합니다.
- 자동 워크플로 구성의 경우 해당 워크플로 구성에서 사용하는 유효 서비스 계정에 권한을 부여합니다.
다음 단계
- 저장소를 만드는 방법은 저장소 만들기를 참조하세요.
- Dataform이 BigQuery와 작동하는 방식에 대한 자세한 내용은 워크플로 개요를 참조하세요.
- 워크플로 구성을 만드는 방법은 실행 예약을 참조하세요.
- 출시 구성을 만드는 방법은 컴파일 구성을 참조하세요.