엄격한 act-as 모드를 사용하면 Dataform에서 다음 사용자 작업에 대한 추가 보안 검사가 사용 설정됩니다.
- 저장소 만들기 또는 업데이트
- 워크플로 구성 만들기 또는 업데이트
- 워크플로 호출 만들기
- 출시 구성 업데이트
이 추가 보안 검사를 수행하려면 이러한 작업을 실행하는 사용자에게 워크플로를 실행하는 데 사용되는 사용자 인증 정보의 서비스 계정인 유효한 서비스 계정에 대한 iam.serviceAccounts.actAs 권한이 있어야 합니다.
자세한 내용은 리소스에 서비스 계정 연결을 참고하세요.
다음과 같은 방법으로 이러한 권한을 사용 설정할 수 있습니다.
- 저장소를 만드는 경우
strict_act_as_checks저장소 플래그로 기존 저장소를 업데이트하는 경우
필요한 역할
이 문서의 태스크를 완료하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.
-
커스텀 서비스 계정에 대한 서비스 계정 사용자 (
roles/iam.serviceAccountUser) -
Logging에서 로그 보기:
로그 뷰어 (
roles/logging.viewer) on the project -
사용자 또는 서비스 계정에 IAM 역할을 부여합니다.
프로젝트의 서비스 계정 관리자 (
roles/iam.serviceAccountAdmin)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
유효한 서비스 계정의 act-as 권한 확인
Dataform 워크플로가 중단 없이 안전하게 실행되도록 하려면 워크플로에서 사용하는 서비스 계정의 권한을 확인하는 것이 중요합니다. 이 섹션에서는 리소스의 유효 서비스 계정을 식별하고, Cloud Logging을 사용하여 권한 문제를 확인한 다음, 발견된 문제를 해결하는 방법을 설명합니다.
유효 서비스 계정 확인
리소스 유형과 다음 조건에 따라 워크플로를 실행하는 유효 서비스 계정을 확인할 수 있습니다.
| 리소스 유형 | 유효 서비스 계정 |
|---|---|
| 저장소 | 저장소를 만들 때 커스텀 서비스 계정을 선택하면 그렇지 않으면 기본적으로 Dataform 서비스 에이전트가 사용됩니다. |
| 워크플로 구성 | 워크플로 구성을 만들 때 커스텀 서비스 계정을 선택할 수 있습니다. 그렇지 않으면 기본적으로 저장소의 Dataform 서비스 에이전트가 사용됩니다. |
| 워크플로 호출 | 컴파일 결과가 컴파일 결과에서 워크플로 호출을 만드는 경우 그렇지 않으면 기본적으로 저장소의 Dataform 서비스 에이전트가 사용됩니다. |
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 |
문자열 | 호출자 주 구성원이 사용하려고 한 서비스 계정입니다. 이 필드는 일반적으로 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_IDworkflowConfig의 리소스 이름 형식은 다음과 같습니다.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 Cloud 프로젝트의 고유 식별자입니다.LOCATION_ID: Dataform 저장소가 있는 리전입니다.REPOSITORY_ID: Dataform 저장소의 사용자 정의 ID입니다. 저장소를 만들 때 저장소에 지정된 이름입니다.COMPILATION_RESULT_ID: Dataform 컴파일 결과의 시스템 생성 고유 식별자입니다.RELEASE_CONFIG_ID: Dataform 출시 구성의 사용자 정의 ID입니다.WORKFLOW_CONFIG_ID: Dataform 워크플로 구성의 사용자 정의 ID입니다.
권한 문제 해결
dryRunResult 필드가 false인 로그 항목을 찾은 경우 다음을 수행합니다.
jsonPayload세부정보에서caller필드의 이메일 주소를 기록하여 주 구성원을 식별합니다.serviceAccount필드의 이메일 주소를 확인하여 서비스 계정을 식별합니다.호출자 주 구성원에게 서비스 계정으로 작동할 권한이 있어야 하는지 확인합니다. 이 권한을 부여하면 호출자가 서비스 계정에서 보유한 권한을 사용할 수 있습니다.
액세스가 의도된 경우 타겟 서비스 계정의 호출자 주 구성원에게 서비스 계정 사용자 역할(
roles/iam.serviceAccountUser)을 부여합니다. 자세한 내용은 서비스 계정 사용자 IAM 역할 부여를 참고하세요.
역할을 부여한 후 이 호출자 및 서비스 계정 조합의 향후 로그에는 dryRunResult: true이 표시되어야 합니다.
서비스 계정 사용자 IAM 역할 부여
서비스 계정 사용자 역할(roles/iam.serviceAccountUser)에는 엄격한 행위자 모드에 필요한 iam.serviceAccounts.actAs 권한이 포함되어 있습니다. Dataform API를 사용하는 경우 호출하는 projects.locations.repositories 메서드에 따라 유효한 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
create또는patchRepository.ServiceAccount속성이 설정된 경우 해당 속성에 서비스 계정 사용자 역할이 부여되어야 합니다.patch메서드를 호출하는 경우 저장소의 모든 워크플로 구성에서 유효한 모든 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
workflowConfigs.create또는workflowConfigs.patch- 워크플로 구성에 사용되는 유효한 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
releaseConfigs.patch- 이 출시 버전 구성을 사용하는 워크플로 구성에 사용되는 모든 유효한 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
workflowInvocations.create- 워크플로 호출에 사용되는 유효한 서비스 계정에 서비스 계정 사용자 역할이 부여되어 있어야 합니다.
커스텀 서비스 계정에 서비스 계정 사용자 역할을 부여하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 IAM > 서비스 계정으로 이동합니다.
프로젝트를 선택합니다.
'PROJECT_NAME' 프로젝트의 서비스 계정 페이지에서 커스텀 서비스 계정을 선택합니다.
액세스 권한이 있는 주 구성원으로 이동한 다음 액세스 권한 부여를 클릭합니다.
새 주 구성원 필드에 기본 Dataform 서비스 에이전트 ID를 입력합니다.
기본 Dataform 서비스 에이전트 ID의 형식은 다음과 같습니다.
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com역할 선택 목록에서 서비스 계정 사용자 역할을 선택합니다.
저장을 클릭합니다.
자세한 내용은 워크플로 구성을 만드는 데 필요한 역할 및 버전 구성을 만드는 데 필요한 역할을 참고하세요.
엄격한 act-as 모드가 자동 출시 및 실행에 미치는 영향
엄격한 '다음과 같이 행동해' 모드를 사용 설정하면 자동 저장소 출시 및 자동 워크플로 실행에 다음과 같은 영향을 미칩니다.
서드 파티 저장소에 연결되지 않은 저장소의 경우:
- 출시 구성에서 자동 출시를 위한 Cron 일정을 설정할 수 없습니다. 이는 다운스트림 서비스 계정에 필요한
iam.serviceAccounts.actAs권한이 없을 수 있는 사용자가 변경한 코드가 자동으로 배포되지 않도록 하기 위해 적용됩니다. - 워크플로 구성에서 크론 일정을 사용하는 예약된 워크플로 실행은 사용 설정된 상태로 유지됩니다. 이러한 자동 실행이 성공하려면 워크플로 구성에 지정된 유효 서비스 계정에 기본 Dataform 서비스 에이전트의
iam.serviceAccounts.actAs권한을 부여해야 합니다.
서드 파티 저장소에 연결된 저장소의 경우:
- 예약된 출시 및 예약된 워크플로 실행은 허용됩니다.
- 출시 구성에서 자동 출시를 사용 설정하거나 워크플로 구성에서 자동 실행을 사용 설정하려면 관련 유효 서비스 계정에 기본 Dataform 서비스 에이전트의
iam.serviceAccounts.actAs권한을 부여해야 합니다.- 자동 출시 구성의 경우 이 출시 구성에 의해 트리거되는 모든 워크플로 구성의 유효 서비스 계정에 권한을 부여합니다.
- 자동 워크플로 구성의 경우 해당 워크플로 구성에서 사용하는 유효 서비스 계정에 권한을 부여합니다.
다음 단계
- 저장소를 만드는 방법을 알아보려면 저장소 만들기를 참고하세요.
- BigQuery에서 Dataform이 작동하는 방식에 대해 자세히 알아보려면 워크플로 개요를 참고하세요.
- 워크플로 구성을 만드는 방법을 알아보려면 실행 예약을 참고하세요.
- 출시 구성을 만드는 방법을 알아보려면 컴파일 구성을 참고하세요.