이 문서에서는 Identity and Access Management 서비스 계정 역할을 보고 관리하는 방법을 설명합니다. Apache Spark용 서버리스 배치 워크로드 또는 대화형 세션은 배치 워크로드를 제출하거나 세션을 만들거나 세션 런타임 템플릿을 만들 때 커스텀 서비스 계정을 지정하지 않는 한 Compute Engine 기본 서비스 계정으로 실행됩니다.
보안 요구사항: Apache Spark 워크로드 또는 세션에 서버리스를 실행하려면 서비스 계정 ActAs
권한이 있어야 합니다. Service Account User
역할에 이 권한이 포함되어 있습니다. 서비스 계정 권한에 대한 자세한 내용은 서비스 계정 인증 역할을 참고하세요.
필요한 Dataproc 작업자 역할
Apache Spark용 서버리스 워크로드 또는 세션 서비스 계정에는 IAM Dataproc 작업자 역할이 있어야 합니다. Apache Spark용 서버리스에서 사용하는 Compute Engine 기본 서비스 계정(project_number-compute@developer.gserviceaccount.com
)에는 기본적으로 이 역할이 있습니다. 배치 워크로드, 세션 또는 세션 템플릿을 만들 때 다른 서비스 계정을 지정하는 경우 서비스 계정에 Dataproc 작업자 역할을 부여해야 합니다.
Cloud Storage 또는 BigQuery에서 데이터를 읽고 쓰는 등의 다른 작업에는 추가 역할이 필요할 수 있습니다.
일부 프로젝트에서는 배치 워크로드 또는 세션 서비스 계정에 Dataproc 작업자 역할 권한과 Apache Spark용 서버리스에 필요하지 않은 추가 권한을 포함하는 프로젝트 편집자 역할이 자동으로 부여되었을 수 있습니다. 최소 권한의 보안 권장사항 원칙을 준수하려면 서비스 계정 편집자 역할을 Dataproc 작업자 역할로 대체합니다.
권한 기반 오류 문제 해결
Apache Spark용 서버리스 배치 워크로드 또는 세션에서 사용하는 서비스 계정의 권한이 잘못되었거나 부족하면 '드라이버 컴퓨팅 노드가 600초 내에 배치에 대해 초기화되지 않음' 오류 메시지가 표시되는 배치 또는 세션 생성 실패가 발생할 수 있습니다. 이 오류는 할당된 제한 시간 내에 Spark 드라이버를 시작할 수 없음을 나타냅니다. 이는 종종 Google Cloud 리소스에 대한 필요한 액세스 권한이 부족하기 때문입니다.
이 문제를 해결하려면 서비스 계정에 다음 최소 역할 또는 권한이 있는지 확인하세요.
- Dataproc 작업자 역할 (
roles/dataproc.worker
): 이 역할은 Apache Spark용 서버리스가 Spark 워크로드 및 세션을 관리하고 실행하는 데 필요한 권한을 부여합니다. - 스토리지 객체 뷰어 (
roles/storage.objectViewer
), 스토리지 객체 생성자 (roles/storage.objectCreator
), 스토리지 객체 관리자 (roles/storage.admin
): Spark 애플리케이션이 Cloud Storage 버킷에서 읽거나 Cloud Storage 버킷에 쓰는 경우 서비스 계정에 버킷에 액세스할 수 있는 적절한 권한이 필요합니다. 예를 들어 입력 데이터가 Cloud Storage 버킷에 있는 경우Storage Object Viewer
이 필요합니다. 애플리케이션이 Cloud Storage 버킷에 출력을 쓰는 경우Storage Object Creator
또는Storage Object Admin
이 필요합니다. - BigQuery 데이터 편집자 (
roles/bigquery.dataEditor
) 또는 BigQuery 데이터 뷰어 (roles/bigquery.dataViewer
): Spark 애플리케이션이 BigQuery와 상호작용하는 경우 서비스 계정에 적절한 BigQuery 역할이 있는지 확인합니다. - Cloud Logging 권한: 서비스 계정에는 효과적인 디버깅을 위해 Cloud Logging에 로그를 쓸 수 있는 권한이 필요합니다. 일반적으로
Logging Writer
역할 (roles/logging.logWriter
)이면 충분합니다.
일반적인 권한 또는 액세스 관련 실패
dataproc.worker
역할 누락: 이 핵심 역할이 없으면 Apache Spark용 서버리스 인프라가 드라이버 노드를 제대로 프로비저닝하고 관리할 수 없습니다.Cloud Storage 권한 부족: Spark 애플리케이션이 필요한 서비스 계정 권한 없이 Cloud Storage 버킷에서 입력 데이터를 읽거나 출력 데이터를 쓰려고 하면 중요한 리소스에 액세스할 수 없기 때문에 드라이버가 초기화되지 않을 수 있습니다.
네트워크 또는 방화벽 문제: VPC 서비스 제어 또는 방화벽 규칙이 서비스 계정의 Google Cloud API 또는 리소스 액세스를 실수로 차단할 수 있습니다.
서비스 계정 권한을 확인하고 업데이트하려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 IAM 및 관리자 > IAM 페이지로 이동합니다.
- Apache Spark용 서버리스 일괄 워크로드 또는 세션에 사용되는 서비스 계정을 찾습니다.
- 필요한 역할이 할당되었는지 확인합니다. 그렇지 않은 경우 추가합니다.
Apache Spark용 서버리스 역할 및 권한 목록은 Apache Spark용 서버리스 권한 및 IAM 역할을 참고하세요.
IAM 서비스 계정 역할 보기 및 관리
Apache Spark용 Serverless 일괄 워크로드 또는 세션 서비스 계정에 부여된 역할을 보고 관리하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
Google 제공 역할 부여 포함을 클릭합니다.
일괄 워크로드 또는 세션 서비스 계정에 나열된 역할을 확인합니다. 다음 이미지는 Apache Spark를 위한 서버리스에서 기본적으로 워크로드 또는 세션 서비스 계정으로 사용하는 Compute Engine 기본 서비스 계정(
project_number-compute@developer.gserviceaccount.com
)에 나열된 필수 Dataproc 작업자 역할을 보여줍니다.Google Cloud 콘솔의 IAM 섹션에 있는 Compute Engine 기본 서비스 계정에 할당된 Dataproc 작업자 역할 서비스 계정 행에 표시된 연필 아이콘을 클릭하여 서비스 계정 역할을 부여하거나 삭제할 수 있습니다.
교차 프로젝트 서비스 계정
일괄 워크로드 프로젝트(배치가 제출된 프로젝트)와 다른 프로젝트의 서비스 계정을 사용하는 Apache Spark용 서버리스 일괄 워크로드를 제출할 수 있습니다. 이 섹션에서 서비스 계정이 있는 프로젝트를 service account project
라고 하고 일괄 처리가 제출된 프로젝트를 batch project
라고 합니다.
교차 프로젝트 서비스 계정을 사용하여 일괄 워크로드를 실행하는 이유는 무엇인가요? 한 가지 가능한 이유는 다른 프로젝트의 서비스 계정에 해당 프로젝트의 리소스에 대한 세분화된 액세스 권한을 제공하는 IAM 역할 역할이 할당되었기 때문입니다.
설정 단계
서비스 계정 프로젝트에서 다음을 실행합니다.
Enable the Dataproc API.
이메일 계정(클러스터를 만드는 사용자)에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 서비스 계정(더욱 세부적으로 제어하려는 경우)에 대한 서비스 계정 사용자 역할을 부여합니다.
자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하여 프로젝트 수준에서 역할을 부여하고 서비스 계정에 대한 액세스 관리를 참고하여 서비스 계정 수준에서 역할을 부여하세요.
gcloud CLI 예시:
다음 샘플 명령어는 사용자에게 프로젝트 수준의 서비스 계정 사용자 역할을 부여합니다.
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
참고:
USER_EMAIL
: 사용자 계정 이메일 주소를user:user-name@example.com
형식으로 제공합니다.
다음 샘플 명령어는 사용자에게 서비스 계정 수준의 서비스 계정 사용자 역할을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
참고:
USER_EMAIL
: 사용자 계정 이메일 주소를user:user-name@example.com
형식으로 제공합니다.
서비스 계정에 일괄 프로젝트에 대한 Dataproc 작업자 역할을 부여합니다.
gcloud CLI 예시:
gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --role="roles/dataproc.worker"
일괄 프로젝트에서 다음을 수행합니다.
Dataproc 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 배치 프로젝트의 Dataproc 서비스 에이전트 서비스 계정이 서비스 계정 프로젝트의 서비스 계정에 대한 토큰을 만들 수 있습니다.
자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하여 프로젝트 수준에서 역할을 부여하고 서비스 계정에 대한 액세스 관리를 참고하여 서비스 계정 수준에서 역할을 부여하세요.
gcloud CLI 예시:
다음 명령어는 배치 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
다음 샘플 명령어는 배치 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 서비스 계정 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
일괄 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 일괄 프로젝트의 Compute Agent 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트의 서비스 계정에 대한 토큰을 만들 수 있는 권한이 부여됩니다.
자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하여 프로젝트 수준에서 역할을 부여하고 서비스 계정에 대한 액세스 관리를 참고하여 서비스 계정 수준에서 역할을 부여하세요.
gcloud CLI 예시:
다음 샘플 명령어는 배치 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
다음 샘플 명령어는 클러스터 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 서비스 계정 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
일괄 워크로드 제출
설정 단계를 완료한 후 배치 워크로드를 제출할 수 있습니다. 서비스 계정 프로젝트의 서비스 계정을 일괄 워크로드에 사용할 서비스 계정으로 지정해야 합니다.