IAM으로 액세스 제어

이 문서에서는 Dataform에서 다음 작업을 수행하는 방법을 보여줍니다.

시작하기 전에

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the BigQuery and Dataform APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  7. Enable the BigQuery and Dataform APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Dataform에 필요한 액세스 권한 부여

    이 섹션에서는 Dataform 서비스 에이전트와 커스텀 서비스 계정이 BigQuery에서 워크플로를 실행하는 데 필요한 Identity and Access Management (IAM) 역할을 부여하는 방법을 보여줍니다.

    Dataform 서비스 에이전트 및 커스텀 서비스 계정 정보

    첫 번째 Dataform 저장소를 만들면 Dataform에서 기본 서비스 에이전트를 자동으로 생성합니다. Dataform은 기본 서비스 에이전트를 사용하여 사용자 대신 BigQuery와 상호작용합니다. 기본 Dataform 서비스 에이전트에는 기본적으로 BigQuery 역할이나 권한이 부여되지 않습니다. 기본 Dataform 서비스 에이전트에 필요한 액세스 권한을 부여해야 합니다.

    기본 Dataform 서비스 에이전트 ID의 형식은 다음과 같습니다.

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    

    PROJECT_NUMBER를Google Cloud 프로젝트의 숫자 ID로 바꿉니다. Google Cloud 프로젝트 ID는Google Cloud 콘솔 대시보드에서 찾을 수 있습니다. 자세한 내용은 프로젝트 식별을 참고하세요.

    기본 Dataform 서비스 에이전트 외에도 다른 서비스 계정을 사용하여 대신 워크플로를 실행할 수 있습니다. 다음과 같은 방법으로 커스텀 서비스 계정을 구성할 수 있습니다.

    • 저장소 수준에서 지정된 저장소의 모든 워크플로를 실행합니다.

    • 워크플로 구성에 대해 개별적으로 실행합니다.

    Dataform 저장소 또는 워크플로 구성을 만들 때 액세스 권한이 있는 Google Cloud 프로젝트와 연결된 모든 서비스 계정을 선택할 수 있습니다. Dataform 리소스와 연결된 모든 서비스 계정에 필요한 권한을 구성해야 합니다.

    Dataform 저장소와 연결된 커스텀 서비스 계정은 해당 저장소에서 워크플로를 실행하는 데만 사용됩니다. 다른 모든 저장소 작업은 기본 Dataform 서비스 계정으로 계속 수행됩니다.

    Dataform 서비스 에이전트, 커스텀 서비스 계정, Google 계정에 필요한 역할

    Dataform에서 인증하는 데 사용되는 기본 Dataform 서비스 에이전트, 커스텀 서비스 계정, Google 계정 사용자 인증 정보(미리보기)가 BigQuery에서 워크플로를 실행하려면 다음 BigQuery IAM 역할이 필요합니다.

    또한 Dataform에서 사용할 커스텀 서비스 계정에 액세스할 수 있도록 기본 Dataform 서비스 에이전트에 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)을 부여해야 합니다.

    엄격한 act-as 모드(미리보기)를 사용 설정하고 워크플로 구성빈도 설정을 구성한 경우 워크플로 구성의 유효 서비스 계정에 있는 기본 Dataform 서비스 에이전트에게 서비스 계정 사용자 역할 (roles/iam.serviceAccountUser)을 부여합니다.

    보안 고려사항

    Dataform 서비스 에이전트, 커스텀 서비스 계정 또는 사용자의 Google 계정 (미리보기)에 Dataform에서 필요한 역할을 부여할 때는 다음과 같은 보안 고려사항이 있습니다.

    • 필요한 역할이 부여된 모든 서비스 에이전트 또는 서비스 계정은 VPC 서비스 제어에 관계없이 서비스 에이전트 또는 서비스 계정이 속한 프로젝트의 BigQuery 또는 Secret Manager에 액세스할 수 있습니다.

      자세한 내용은 VPC 서비스 제어 구성을 참고하세요.

    • dataform.repositories.create IAM 권한이 있는 모든 사용자는 기본 Dataform 서비스 에이전트와 해당 서비스 에이전트 또는 서비스 계정에 부여된 모든 권한을 사용하여 코드를 실행할 수 있습니다.

      자세한 내용은 Dataform 권한의 보안 고려사항을 참조하세요.

    사용자, 서비스 에이전트 또는 서비스 계정이 BigQuery에서 읽거나 쓸 수 있는 데이터를 제한하려면 선택한 BigQuery 데이터 세트 또는 테이블에 대한 세분화된 BigQuery IAM 권한을 부여하면 됩니다. 자세한 내용은 데이터 세트 액세스 제어테이블 및 뷰 액세스 제어를 참조하세요.

    사용자가 다른 사용자의 Google 계정 사용자 인증 정보를 사용하는 동안 작업을 수행하지 못하도록 다음 제한사항이 적용됩니다.

    • 다른 Google 계정 사용자의 사용자 인증 정보가 연결된 워크플로 구성을 수정하려면 워크플로 구성에 자체 Google 계정 사용자 사용자 인증 정보를 연결하거나 {dataform_name_short} 서비스 에이전트 또는 커스텀 서비스 계정으로 인증하도록 워크플로 구성을 변경해야 합니다.
    • 다른 Google 계정 사용자의 사용자 인증 정보가 연결된 출시 구성을 참조하는 워크플로 구성이 있는 경우 출시 구성의 컴파일 결과를 수정할 수 없습니다.
    • Google 계정 사용자 인증 정보로 인증하고 일정이 있는 출시 구성을 참조하도록 워크플로 구성을 설정할 수 없습니다. 이 제한사항으로 인해 다음과 같은 결과가 발생합니다.

      • Google 계정 사용자 인증 정보로 인증하도록 설정된 출시 구성을 참조하는 워크플로 구성이 있는 경우 일정을 사용하도록 출시 구성을 업데이트할 수 없습니다.
      • Google 계정 사용자 인증 정보로 인증하고 일정이 있는 출시 구성을 가리키는 워크플로 구성을 만들 수 없습니다.
      • Google 계정 사용자 인증 정보를 사용하고 일정이 있는 출시 구성을 가리키도록 워크플로 구성을 만들거나 업데이트할 수 없습니다.

    필요한 BigQuery 역할 부여

    기본 Dataform 서비스 에이전트, Dataform에서 사용하려는 커스텀 서비스 계정 또는 Dataform에서 인증하는 데 사용하려는 사용자의 Google 계정(미리보기)에 필요한 BigQuery IAM 역할을 부여하려면 다음 단계를 따르세요.

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

      Dataform으로 이동

    2. 저장소를 선택하거나 만듭니다.

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

      IAM으로 이동

    4. 액세스 권한 부여를 클릭합니다.

    5. 새 주 구성원 필드에 서비스 에이전트 ID, 서비스 계정 ID 또는 사용자의 Google 계정 이메일 (미리보기)을 입력합니다.

    6. 역할 선택 목록에서 BigQuery 작업 사용자 역할을 선택합니다.

    7. 다른 역할 추가를 클릭한 다음 역할 선택 목록에서 BigQuery 데이터 편집자 역할을 선택합니다.

    8. 다른 역할 추가를 클릭한 다음 역할 선택 목록에서 BigQuery 데이터 뷰어 역할을 선택합니다.

    9. 저장을 클릭합니다.

    커스텀 서비스 계정에 토큰 생성 액세스 권한 부여

    Dataform에서 커스텀 서비스 계정을 사용하려면 기본 Dataform 서비스 에이전트가 커스텀 서비스 계정에 액세스할 수 있어야 합니다. 이 액세스 권한을 부여하려면 서비스 계정 토큰 생성자 역할이 있는 커스텀 서비스 계정에 대한 주 구성원으로 기본 Dataform 서비스 에이전트를 추가해야 합니다.

    기본 Dataform 서비스 에이전트에 커스텀 서비스 계정에 대한 액세스 권한을 부여하려면 다음 단계를 따르세요.

    1. Google Cloud 콘솔에서 IAM > 서비스 계정으로 이동합니다.

      서비스 계정으로 이동

    2. 프로젝트를 선택합니다.

    3. 'PROJECT_NAME' 프로젝트의 서비스 계정 페이지에서 커스텀 서비스 계정을 선택합니다.

    4. 액세스 권한이 있는 주 구성원으로 이동한 다음 액세스 권한 부여를 클릭합니다.

    5. 새 주 구성원 필드에 기본 Dataform 서비스 에이전트 ID를 입력합니다.

      기본 Dataform 서비스 에이전트 ID의 형식은 다음과 같습니다.

      service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
      
    6. 역할 선택 목록에서 서비스 계정 토큰 생성자 역할을 선택합니다.

    7. 저장을 클릭합니다.

    IAM으로 Dataform에 대한 액세스 제어

    이 섹션에서는 Dataform의 액세스 제어 옵션을 설명하고 Dataform 역할을 보고 부여하는 방법을 보여줍니다. Dataform은 Identity and Access Management(IAM)를 사용하여 액세스를 제어합니다. IAM의 역할 및 권한에 대한 자세한 내용은 IAM 역할 및 권한 색인을 참고하세요.

    사전 정의된 Dataform 역할

    다음 표에는 Dataform 리소스에 대한 액세스 권한을 부여하는 사전 정의된 역할이 나와 있습니다.

    Role Permissions

    (roles/dataform.admin)

    Full access to all Dataform resources.

    dataform.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update
    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update
    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query
    • dataform.config.get
    • dataform.config.update
    • dataform.locations.get
    • dataform.locations.list
    • dataform.releaseConfigs.create
    • dataform.releaseConfigs.delete
    • dataform.releaseConfigs.get
    • dataform.releaseConfigs.list
    • dataform.releaseConfigs.update
    • dataform.repositories.commit
    • dataform.repositories.computeAccessTokenStatus
    • dataform.repositories.create
    • dataform.repositories.delete
    • dataform.repositories.fetchHistory
    • dataform.repositories.fetchRemoteBranches
    • dataform.repositories.get
    • dataform.repositories.getIamPolicy
    • dataform.repositories.list
    • dataform.repositories.queryDirectoryContents
    • dataform.repositories.readFile
    • dataform.repositories.setIamPolicy
    • dataform.repositories.update
    • dataform.workflowConfigs.create
    • dataform.workflowConfigs.delete
    • dataform.workflowConfigs.get
    • dataform.workflowConfigs.list
    • dataform.workflowConfigs.update
    • dataform.workflowInvocations.cancel
    • dataform.workflowInvocations.create
    • dataform.workflowInvocations.delete
    • dataform.workflowInvocations.get
    • dataform.workflowInvocations.list
    • dataform.workflowInvocations.query
    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCommenter)

    Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.locations.get

    dataform.repositories.get

    dataform.repositories.readFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCreator)

    Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.create

    dataform.repositories.list

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeEditor)

    Edit access code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeOwner)

    Full access to code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.*

    • dataform.repositories.commit
    • dataform.repositories.computeAccessTokenStatus
    • dataform.repositories.create
    • dataform.repositories.delete
    • dataform.repositories.fetchHistory
    • dataform.repositories.fetchRemoteBranches
    • dataform.repositories.get
    • dataform.repositories.getIamPolicy
    • dataform.repositories.list
    • dataform.repositories.queryDirectoryContents
    • dataform.repositories.readFile
    • dataform.repositories.setIamPolicy
    • dataform.repositories.update

    dataform.workspaces.*

    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeViewer)

    Read-only access to all code resources.

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.editor)

    Edit access to Workspaces and Read-only access to Repositories.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.config.get

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.releaseConfigs.get

    dataform.releaseConfigs.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workflowConfigs.get

    dataform.workflowConfigs.list

    dataform.workflowInvocations.*

    • dataform.workflowInvocations.cancel
    • dataform.workflowInvocations.create
    • dataform.workflowInvocations.delete
    • dataform.workflowInvocations.get
    • dataform.workflowInvocations.list
    • dataform.workflowInvocations.query

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.serviceAgent)

    Gives permission for the Dataform API to access a secret from Secret Manager

    dataform.compilationResults.create

    dataform.workflowInvocations.create

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.viewer)

    Read-only access to all Dataform resources.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.compilationResults.get

    dataform.compilationResults.list

    dataform.compilationResults.query

    dataform.config.get

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.releaseConfigs.get

    dataform.releaseConfigs.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workflowConfigs.get

    dataform.workflowConfigs.list

    dataform.workflowInvocations.get

    dataform.workflowInvocations.list

    dataform.workflowInvocations.query

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    커스텀 Dataform 역할

    커스텀 역할에는 사용자가 지정하는 모든 권한이 포함될 수 있습니다. 개발 작업공간 만들기 또는 개발 작업공간 내에서 파일 및 디렉터리 만들기 등의 특정 관리 작업을 수행할 수 있는 권한이 포함된 커스텀 역할을 만들 수 있습니다. 커스텀 역할을 만들려면 커스텀 역할 만들기 및 관리를 참조하세요.

    Dataform 권한의 보안 고려사항

    dataform.repositories.create 권한이 있는 사용자는 기본 Dataform 서비스 에이전트와 해당 서비스 에이전트에 부여된 모든 권한을 사용하여 BigQuery에서 코드를 실행할 수 있습니다. 여기에는 Dataform 워크플로 실행이 포함됩니다.

    dataform.repositories.create 권한은 다음 IAM 역할에 포함됩니다.

    사용자, 서비스 에이전트 또는 서비스 계정이 BigQuery에서 읽거나 쓸 수 있는 데이터를 제한하려면 선택한 BigQuery 데이터 세트 또는 테이블에 대한 세분화된 BigQuery IAM 권한을 부여하면 됩니다. 자세한 내용은 데이터 세트 액세스 제어테이블 및 뷰 액세스 제어를 참조하세요.

    기본 Dataform 서비스 에이전트 및 여기에 필요한 역할과 권한에 대한 자세한 내용은 Dataform에 필요한 액세스 권한 부여를 참고하세요.

    Dataform 역할 보기

    Google Cloud 콘솔에서 다음 단계를 수행합니다.

    1. IAM 및 관리자 > 역할 페이지로 이동합니다.

      역할로 이동

    2. 필터 필드에서 사용 그룹을 선택하고 Dataform을 입력한 다음 Enter 키를 누릅니다.

    3. 나열된 역할 중 하나를 클릭하면 오른쪽 창에 역할 권한이 표시됩니다.

      예를 들어 Dataform 관리자 역할에는 모든 Dataform 리소스에 대해 전체 액세스 권한이 포함됩니다.

    프로젝트에 역할을 부여하는 방법에 대한 자세한 내용은 역할 부여를 참고하세요. 이렇게 하면 사전 정의된 역할 또는 커스텀 역할을 부여할 수 있습니다.

    개별 저장소에 대한 액세스 제어

    세부적인 권한으로 Dataform에 대한 액세스를 제어하려면 Dataform API repositories.setIamPolicy 요청을 사용하여 개별 저장소에 Dataform IAM 역할을 설정할 수 있습니다.

    개별 Dataform 저장소에 Dataform IAM 역할을 설정하려면 다음 단계를 따르세요.

    1. 터미널에서 액세스 정책을 사용하여 Dataform API repositories.setIamPolicy 요청을 전달합니다.

    2. 정책에서 다음 형식으로 선택한 역할에 사용자, 그룹, 도메인, 서비스 에이전트 또는 서비스 계정을 바인딩합니다.

      {
      "policy":
         {
            "bindings": [
            {
               "role": "roles/ROLE",
               "members": [
                  "TYPE:IDENTIFIER",
               ]
            },
            ],
         }
      }
      

      다음을 바꿉니다.

      • ROLE: 저장소에 부여할 Dataform IAM 역할입니다.
      • TYPE: user, group, domain 또는 serviceAccount
      • IDENTIFIER: 역할을 부여할 사용자, 그룹, 도메인 또는 서비스 계정입니다.
    3. IAM 페이지에서 모든 사용자가 dataform.repositories.list 권한이 있는 Dataform 역할을 통해 Dataform 저장소의 전체 목록을 볼 수 있는지 확인합니다.

    4. IAM에서 모든 Dataform 저장소에 대한 전체 액세스 권한이 필요한 사용자에게만 모든 저장소에 대한 Dataform 관리자 역할이 부여되었는지 확인하세요.

    다음 명령어는 sales 저장소의 Dataform 편집자 역할을 부여하는 repositories.setIamPolicy Dataform API 요청을 단일 사용자에게 전달합니다.

    curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
    

    저장소에 대한 공개 액세스 권한 부여

    allAuthenticatedUsers 주 구성원에게 저장소의 IAM 역할을 부여하여 Dataform 저장소에 대한 공개 액세스 권한을 부여할 수 있습니다.

    allAuthenticatedUsers 주 구성원에게 IAM 역할을 할당하면 서비스 에이전트, 서비스 계정, Google 계정으로 인증된 인터넷의 모든 사용자에게 해당 역할이 부여됩니다. 여기에는 개인 Gmail 계정과 같이 Google Workspace 계정이나 Cloud ID 도메인에 연결되지 않은 계정이 포함됩니다. 익명 방문자와 같은 인증되지 않은 사용자는 포함되지 않습니다. 자세한 내용은 모든 인증된 사용자를 참고하세요.

    예를 들어 sales 저장소의 allAuthenticatedUsers에 Dataform 뷰어 역할을 부여하면 Google 계정으로 인증된 모든 서비스 에이전트, 서비스 계정, 인터넷 사용자는 모든 sales 코드 리소스에 대해 읽기 전용 액세스 권한만 갖습니다.

    Dataform 저장소에 공개 액세스 권한을 부여하려면 다음 단계를 따르세요.

    1. 터미널에서 액세스 정책을 사용하여 Dataform API repositories.setIamPolicy 요청을 전달합니다.

    2. 정책에서 다음 형식으로 선택한 역할에 allAuthenticatedUsers 주 구성원을 바인딩합니다.

      {
      "policy":
         {
            "bindings": [
            {
               "role": "roles/ROLE",
               "members": [
                  "allAuthenticatedUsers",
               ]
            },
            ],
         }
      }
      

      ROLE을 인증된 모든 사용자에게 부여하려는 Dataform IAM 역할로 바꿉니다.

    다음 명령어는 sales 저장소에 대한 Dataform 뷰어 역할을 부여하는 repositories.setIamPolicy Dataform API 요청을 allAuthenticatedUsers에 전달합니다.

    curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.viewer", "members": ["allAuthenticatedUsers"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
    

    저장소에 대한 공개 액세스 방지

    Dataform 저장소에 대한 공개 액세스 권한이 부여되지 않도록 하려면 프로젝트에서 allAuthenticatedUsers 주 구성원을 제한하면 됩니다.

    프로젝트에서 allAuthenticatedUsers를 제한하려면 iam.allowedPolicyMemberDomains 정책을 설정하고 allowed_values 목록에서 allAuthenticatedUsers를 삭제하면 됩니다.

    iam.allowedPolicyMemberDomains 정책에서 allAuthenticatedUsers를 제한하면 프로젝트의 모든 IAM 정책에서 allAuthenticatedUsers 주 구성원을 사용할 수 없으므로 Dataform 저장소를 비롯한 모든 리소스에 대한 공개 액세스 권한이 부여되지 않습니다.

    iam.allowedPolicyMemberDomains 정책 및 설정 방법에 관한 자세한 내용은 도메인별 ID 제한을 참고하세요.

    Dataform의 직원 ID 제휴

    직원 ID 제휴를 사용하면 외부 ID 공급업체 (IdP)를 통해 IAM으로 사용자를 인증 및 승인하여 Google Cloud 서비스에 액세스할 수 있습니다.

    Dataform은 알려진 제한사항 없이 직원 ID 제휴를 지원합니다.

    IAM으로 개별 테이블에 대한 액세스 제어

    이 섹션에서는 개별 Dataform 테이블과 뷰에 대한 BigQuery IAM 역할을 부여하고 취소하는 방법을 보여줍니다.

    Dataform은 테이블이나 뷰를 실행할 때 BigQuery에서 리소스를 만듭니다. Dataform에서 개발하는 동안 개별 테이블과 뷰에 BigQuery 역할을 부여하여 실행 후 BigQuery에서 액세스를 제어할 수 있습니다.

    리소스에 대한 액세스 권한 부여 및 취소에 대한 자세한 내용은 리소스에 대한 액세스 권한 부여를 참조하세요.

    테이블이나 뷰에 BigQuery 역할 부여

    선택한 테이블 또는 뷰의 .sqlx 정의 파일에 GRANT DCL 문이 있는 post_operations 블록을 추가하여 Dataform에서 테이블 또는 뷰에 BigQuery 역할을 부여할 수 있습니다.

    선택한 테이블이나 뷰에 BigQuery 역할을 부여하려면 다음 단계를 따르세요.

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

      Dataform으로 이동

    2. 저장소를 선택한 후 작업공간을 선택합니다.

    3. 파일 창에서 definitions/ 디렉터리를 펼칩니다.

    4. 액세스 권한을 부여하려는 테이블이나 뷰의 .sqlx 정의 파일을 선택합니다.

    5. 파일에 다음 코드 스니펫을 입력합니다.

      post_operations {
          GRANT "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          TO "USER_LIST"
      }
      

      다음을 바꿉니다.

      • ROLE_LIST: 부여하려는 BigQuery 역할 또는 쉼표로 구분된 BigQuery 역할 목록

      • RESOURCE_TYPE: TABLE 또는 VIEW입니다.

      • USER_LIST: 역할이 부여된 사용자를 쉼표로 구분한 목록

        유효한 형식 목록은 user_list를 참조하세요.

    6. (선택사항): 형식을 클릭합니다.

    7. 테이블 또는 뷰를 실행합니다.

    8. 증분 테이블에 대한 액세스 권한을 부여한 경우 첫 실행 후 테이블 정의 파일에서 GRANT 문을 삭제하세요.

    다음 코드 샘플에서는 사용자에게 부여된 테이블에 대한 BigQuery 뷰어 역할을 보여줍니다.

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      GRANT `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      TO "user:222larabrown@gmail.com"
    }
    

    테이블이나 뷰에서 BigQuery 역할 취소

    선택한 테이블 또는 뷰의 .sqlx 정의 파일에 REVOKE DCL 문이 있는 post_operations 블록을 추가하여 테이블 또는 뷰에서 BigQuery 역할을 취소할 수 있습니다.

    선택한 테이블이나 뷰에서 BigQuery 역할을 취소하려면 다음 단계를 따르세요.

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

      Dataform으로 이동

    2. 저장소를 선택한 후 작업공간을 선택합니다.

    3. 파일 창에서 definitions/ 디렉터리를 펼칩니다.

    4. 액세스 권한을 취소하려는 테이블이나 뷰의 .sqlx 정의 파일을 선택합니다.

    5. post_operations 블록에 다음 REVOKE 문을 입력합니다.

          REVOKE "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          FROM "USER_LIST"
      

      다음을 바꿉니다.

      • ROLE_LIST: 취소하려는 BigQuery 역할 또는 쉼표로 구분된 BigQuery 역할 목록
      • RESOURCE_TYPE: TABLE 또는 VIEW입니다.
      • USER_LIST: 역할을 취소할 사용자를 쉼표로 구분한 목록. 유효한 형식 목록은 user_list를 참조하세요.
    6. 파일의 GRANT 문에서 부여된 액세스 권한을 취소하려면 GRANT 문을 REVOKE 문으로 바꿉니다.

    7. (선택사항): 형식을 클릭합니다.

    8. 테이블 또는 뷰를 실행합니다.

    9. 증분 테이블에 대한 액세스 권한을 취소한 경우 첫 실행 후 테이블 정의 파일에서 REVOKE 문을 삭제하세요.

    다음 코드 샘플에서는 사용자가 취소한 테이블에 대한 BigQuery 뷰어 역할을 보여줍니다.

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      REVOKE `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      FROM "user:222larabrown@gmail.com"
    }
    

    테이블과 뷰의 BigQuery 역할 일괄 관리

    단일 위치에서 개별 테이블 및 뷰에 대한 BigQuery 액세스를 제어하려면 GRANTREVOKE DCL 문으로 전용 type: "operations" 파일을 생성할 수 있습니다.

    단일 type: "operations" 파일에서 BigQuery 테이블 액세스를 관리하려면 다음 단계를 따르세요.

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

      Dataform으로 이동

    2. 저장소를 선택한 후 작업공간을 선택합니다.

    3. 파일 창에서 definitions/ 옆에 있는 더보기 메뉴를 클릭합니다.

    4. 파일 만들기를 클릭합니다.

    5. 파일 경로 추가 필드에 definitions/를 입력하고 파일 이름 다음에 .sqlx를 입력합니다. 예를 들면 definitions/table-access.sqlx입니다.

      파일 이름에는 숫자, 문자, 하이픈, 밑줄만 포함할 수 있습니다.

    6. 파일 만들기를 클릭합니다.

    7. 파일 창에서 definitions/ 디렉터리를 펼치고 새로 만든 파일을 선택합니다.

    8. 파일에 다음 코드 스니펫을 입력합니다.

        config { type: "operations" }
      
        GRANT "ROLE_LIST"
        ON RESOURCE_TYPE RESOURCE_NAME
        TO "USER_LIST"
      
        REVOKE "ROLE_LIST"
        ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME
        TO "USER_LIST"
      

      다음을 바꿉니다.

      • ROLE_LIST: 부여하거나 취소할 BigQuery 역할 또는 쉼표로 구분된 BigQuery 역할 목록
      • RESOURCE_TYPE: TABLE 또는 VIEW입니다.
      • RESOURCE_NAME: 테이블 또는 뷰의 이름
      • USER_LIST: 역할을 부여하거나 취소할 사용자 목록을 쉼표로 구분한 목록. 유효한 형식 목록은 user_list를 참조하세요.
    9. 필요에 따라 GRANTREVOKE 문을 추가합니다.

      1. 파일의 GRANT 문에서 부여된 액세스 권한을 취소하려면 GRANT 문을 REVOKE 문으로 바꿉니다.

        REVOKE 문을 추가하지 않고 GRANT 문을 삭제하면 액세스 권한이 취소되지 않습니다.

    10. (선택사항): 형식을 클릭합니다.

    11. 각 업데이트 후에 파일을 실행합니다.

      1. 증분 테이블에 대한 액세스 권한을 부여하거나 취소한 경우 문을 처음 실행한 후 파일에서 GRANT 또는 REVOKE 문을 삭제하세요.

    다음 단계