이 문서에서는 사용자 관리형 서비스 계정을 사용하도록 구성된 가상 머신(VM) 인스턴스를 만드는 방법을 설명합니다. 서비스 계정은 승인된 API 호출을 수행하기 위해 일반적으로 애플리케이션 또는 컴퓨팅 워크로드에서 사용되는 특별한 종류의 계정입니다.
서비스 계정은 커스텀 애플리케이션과 같은 워크로드가 최종 사용자의 개입 없이 Google Cloud 리소스에 액세스해야 하는 시나리오에 필요합니다. 서비스 계정을 사용해야 하는 경우에 대한 자세한 내용은 서비스 계정 사용 권장사항을 참조하세요.
Google Cloud API를 호출해야 하는 애플리케이션이 있는 경우 애플리케이션 또는 워크로드가 실행 중인 VM에 사용자 관리형 서비스 계정을 연결하는 것이 좋습니다. 그런 다음 서비스 계정에 IAM 역할을 부여하면 서비스 계정 및 VM에서 실행되는 애플리케이션까지 Google Cloud 리소스에 액세스할 수 있습니다.
시작하기 전에
-
인증을 설정합니다.
이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.
콘솔
Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.
gcloud
-
Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.
gcloud init
- 기본 리전 및 영역을 설정합니다.
Terraform
로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
-
Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.
gcloud auth application-default login
자세한 내용은 로컬 개발 환경의 인증 설정를 참조하세요.
REST
로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.
-
필요한 역할
서비스 계정을 사용하는 VM을 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Compute 인스턴스 관리자(v1)(
roles/compute.instanceAdmin.v1
) -
서비스 계정 만들기(
roles/iam.serviceAccountCreator
)
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 서비스 계정을 사용하는 VM을 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.
필수 권한
서비스 계정을 사용하는 VM을 만들려면 다음 권한이 필요합니다.
-
서비스 계정 만들기:
serviceAccountCreator
역할의 모든 권한 -
VM을 만들려면 다음 안내를 따르세요.
- 프로젝트에 대한
compute.instances.create
권한 compute.instances.updateShieldedVmConfig
권한(보안 VM 인스턴스를 만들고 보안 VM의 설정을 변경할 수 있도록 하려는 경우)- 프로젝트에 대한
compute.networks.use
권한(레거시 네트워크를 사용하는 경우) - 전체 프로젝트 또는 선택된 서브넷(VPC 네트워크)에 대한
compute.subnetworks.use
권한 - 프로젝트에 대한
compute.networks.useExternalIp
권한(외부 IP 주소(임시 또는 고정)를 기존 네트워크를 사용하는 인스턴스에 할당해야 하는 경우) - 전체 프로젝트 또는 선택된 서브넷에 대한
compute.subnetworks.useExternalIp
권한(외부 IP 주소(임시 또는 고정)를 VPC 네트워크를 사용하는 인스턴스에 할당해야 하는 경우) - 프로젝트에 대한
compute.addresses.use
권한(프로젝트에서 고정 주소를 지정하는 경우) compute.instances.setMetadata
권한(메타데이터를 설정하는 경우)- 인스턴스에 대한
compute.instances.setTags
권한(태그를 설정하는 경우) - 인스턴스에 대한
compute.instances.setLabels
권한(라벨을 설정하는 경우) - 인스턴스에 대한
compute.instances.setServiceAccount
권한(서비스 계정을 설정하는 경우) - 이미지에 대한
compute.images.useReadOnly
권한(새 루트 영구 디스크를 만드는 경우) - 프로젝트에 대한
compute.disks.create
권한(이 인스턴스로 새 루트 영구 디스크를 만드는 경우) - 디스크에 대한
compute.disks.useReadOnly
권한(기존 영구 디스크를 읽기 전용 모드로 연결하는 경우) - 디스크에 대한
compute.disks.use
권한(기존 디스크를 읽기/쓰기 모드로 연결하는 경우) - 디스크에 대한
compute.disks.setLabels
권한(라벨을 설정하는 경우) - 새 스냅샷을 만드는 데 필요한 프로젝트에 대한
compute.snapshots.create
권한(스냅샷을 사용하여 인스턴스를 만드는 경우) - 스냅샷에 대한
compute.snapshots.useReadOnly
권한(스냅샷을 사용하여 인스턴스를 만드는 경우) - 인스턴스 템플릿에 대한
compute.instanceTemplates.useReadOnly
권한(인스턴스 템플릿에서 인스턴스를 만드는 경우)
- 프로젝트에 대한
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
개요
다음과 같이 VM의 서비스 계정을 구성하는 것이 좋습니다.
- Compute Engine 기본 서비스 계정을 사용하는 대신 새로운 사용자 관리 서비스 계정을 만들고 이 서비스 계정에 필요한 리소스 및 작업에 대해서만 IAM 역할을 부여합니다.
- VM에 서비스 계정을 연결합니다.
- VM에서 클라우드 플랫폼(
https://www.googleapis.com/auth/cloud-platform
) 범위를 설정합니다. 이렇게 하면 VM의 서비스 계정이 사용할 권한이 있는 Google Cloud API를 호출할 수 있습니다.- Google Cloud 콘솔을 사용하여 서비스 계정을 지정하는 경우 VM의 액세스 범위는 기본적으로
cloud-platform
범위로 지정됩니다. - Google Cloud CLI 또는 Compute Engine API를 사용하여 서비스 계정을 지정하는 경우
scopes
매개변수를 사용하여 액세스 범위를 설정할 수 있습니다.
- Google Cloud 콘솔을 사용하여 서비스 계정을 지정하는 경우 VM의 액세스 범위는 기본적으로
서비스 계정 설정
서비스 계정을 만들고 필요한 IAM 역할을 할당합니다. IAM 역할을 필요한 만큼 할당하세요. 필요에 따라 서비스 계정에서 IAM 역할을 수정할 수 있습니다.
서비스 계정 권한을 제한하고 서비스 계정 권한을 정기적으로 확인하여 최신 상태인지 확인하는 것이 좋습니다.
다음 방법 중 하나를 사용하여 서비스 계정을 설정합니다.
콘솔
- 프로젝트를 선택합니다.
-
서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.
서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면
Service account for quickstart
입니다. - 만들고 계속하기를 클릭합니다.
-
서비스 계정에 필요한 역할을 부여합니다.
역할을 부여하려면 역할 선택 목록을 찾은 후 역할을 선택합니다.
역할을 추가로 부여하려면
다른 역할 추가를 클릭하고 각 역할을 추가합니다. - 계속을 클릭합니다.
- 서비스 계정 사용자 역할 상자에 Google 계정의 이메일 주소를 입력합니다.
-
완료를 클릭하여 서비스 계정 만들기를 마칩니다.
Google Cloud Console에서 서비스 계정 만들기 페이지로 이동합니다.
서비스 계정 만들기로 이동gcloud
-
서비스 계정을 만듭니다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
을 서비스 계정 이름으로 바꿉니다. -
프로젝트 및 리소스에 대한 액세스 권한을 제공하려면 서비스 계정에 역할을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
다음을 바꿉니다.
SERVICE_ACCOUNT_NAME
: 서비스 계정의 이름입니다.PROJECT_ID
: 서비스 계정을 만든 프로젝트 ID입니다.ROLE
: 부여할 역할입니다.
- 서비스 계정에 다른 역할을 부여하려면 이전 단계에서 한 것처럼 명령어를 실행합니다.
-
Google 계정에 서비스 계정 역할을 사용하고 서비스 계정을 다른 리소스에 연결할 수 있게 해주는 역할을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
다음을 바꿉니다.
SERVICE_ACCOUNT_NAME
: 서비스 계정의 이름입니다.PROJECT_ID
: 서비스 계정을 만든 프로젝트 ID입니다.USER_EMAIL
: Google 계정의 이메일 주소입니다.
인증을 설정합니다.
Terraform
google_service_account
리소스를 사용하여 서비스 계정을 만들 수 있습니다.
account_id
및 display_name
속성의 자리표시자 값을 바꿔야 합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
VM 만들기 및 서비스 계정 연결
서비스 계정을 만든 후 VM을 만들고 이전 섹션에서 만든 서비스 계정을 연결합니다. 또한 VM의 액세스 범위를 cloud-platform
으로 설정합니다.
기존 VM이 이미 있고 다른 VM 계정을 사용하도록 해당 VM을 구성하려면 연결된 서비스 계정 변경을 참조하세요.
다음 방법 중 하나를 사용하여 VM을 만들고 서비스 계정을 연결합니다.
콘솔
- Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
- 프로젝트를 선택하고 계속을 클릭합니다.
- 인스턴스 만들기를 클릭합니다.
- VM의 이름을 지정합니다.
- ID 및 API 액세스 섹션으로 이동합니다.
- 서비스 계정 목록에서 만든 서비스 계정을 선택합니다. VM에 서비스 계정을 연결하면 Google Cloud 액세스 범위
cloud-platform
액세스 범위가 VM에 자동으로 설정됩니다. - 필요에 따라 VM을 추가로 맞춤설정합니다.
- 만들기를 클릭하여 VM을 만들고 시작합니다.
gcloud
Google Cloud CLI를 사용하여 새 VM 인스턴스를 만들고 커스텀 서비스 계정을 사용하도록 구성하려면 gcloud compute instances create
명령어를 사용하고 VM 인스턴스에 서비스 계정 이메일 및 cloud-platform
액세스 범위를 제공합니다.
gcloud compute instances create VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=https://www.googleapis.com/auth/cloud-platform
다음을 바꿉니다.
SERVICE_ACCOUNT_EMAIL
: 만든 서비스 계정의 이메일 주소입니다. 예를 들면my-sa-123@my-project-123.iam.gserviceaccount.com
입니다. 이메일 주소를 보려면 서비스 계정 나열을 참조하세요.VM_NAME
: VM 인스턴스의 이름입니다.
예를 들면 다음과 같습니다.
gcloud compute instances create example-vm \ --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/cloud-platform
별칭 --scopes=cloud-platform
을 사용하여 범위를 지정할 수도 있습니다.
이러한 별칭은 gcloud CLI에서만 인식됩니다. API와 다른 라이브러리에서는 이러한 별칭이 인식되지 않으므로 전체 범위 URI를 지정해야 합니다.
Terraform
서비스 계정을 사용하도록 새 VM을 설정하려면 google_compute_instance
리소스를 사용하면 됩니다.
REST
instances.insert
메서드를 사용하여 VM을 만들고 VM 인스턴스의 서비스 계정 이메일과 액세스 범위를 지정합니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE
/instances { "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name":"VM_NAME
", "disks":[ { "initializeParams":{ "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot":true } ], "networkInterfaces":[ { "network":"global/networks/NETWORK_NAME" } ], "serviceAccounts": [ { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], "shieldedInstanceConfig":{ "enableSecureBoot":"ENABLE_SECURE_BOOT" } }
다음을 바꿉니다.
PROJECT_ID
: VM을 만들 프로젝트의 IDZONE
: VM을 만들 영역MACHINE_TYPE_ZONE
: 새 VM에 사용할 머신 유형이 포함된 영역MACHINE_TYPE
: 새 VM의 머신 유형(사전 정의 또는 커스텀)VM_NAME
: 새 VM의 이름IMAGE_PROJECT
: 이미지가 포함된 프로젝트
예를 들어debian-10
을 이미지 계열로 지정하는 경우debian-cloud
를 이미지 프로젝트로 지정합니다.IMAGE or IMAGE_FAMILY
: 다음 중 하나를 지정합니다.IMAGE
: 공개 이미지의 특정 버전
예를 들어"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
IMAGE_FAMILY
: 이미지 계열
이렇게 하면 지원 중단되지 않은 최신 OS 이미지에서 VM을 만듭니다. 예를 들어"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
을 지정하면 Compute Engine이Debian 10
이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다.
NETWORK_NAME
: VM에 사용하려는 VPC 네트워크입니다. 기본 네트워크를 사용하도록default
를 지정할 수 있습니다.SERVICE_ACCOUNT_EMAIL
: 만든 서비스 계정의 이메일 주소입니다. 예를 들면my-sa-123@my-project-123.iam.gserviceaccount.com
입니다. 이메일 주소를 보려면 서비스 계정 이메일 가져오기를 참조하세요.ENABLE_SECURE_BOOT
: 선택사항: 보안 VM 기능을 지원하는 이미지를 선택한 경우 기본적으로 Compute Engine은 vTPM(Virtual Trusted Platform Module) 및 무결성 모니터링을 사용 설정합니다. Compute Engine은 기본적으로 보안 부팅을 사용 설정하지 않습니다.enableSecureBoot
에true
를 지정하면 Compute Engine은 보안 VM 기능 3가지를 모두 사용 설정하여 VM을 만듭니다. Compute Engine에서 VM을 시작한 후 보안 VM 옵션을 수정하려면 VM을 중지해야 합니다.
다른 Google Cloud 서비스 액세스 및 사용
VM이 서비스 계정을 사용하도록 구성된 후 애플리케이션은 서비스 계정을 사용하여 인증할 수 있습니다. 가장 일반적인 방법은 애플리케이션 기본 사용자 인증 정보와 클라이언트 라이브러리를 사용하여 인증하는 것입니다. gcloud CLI 및 gsutil
과 같은 일부 Google Cloud 도구는 서비스 계정을 사용하여 VM에서 Google Cloud API에 자동으로 액세스할 수 있습니다. 자세한 내용은 서비스 계정을 사용하여 워크로드 인증을 참조하세요.
서비스 계정이 삭제되면 애플리케이션이 해당 서비스 계정을 통해 Google Cloud 리소스에 더 이상 액세스할 수 없습니다. 기본 App Engine 및 Compute Engine 서비스 계정을 삭제하면 VM에서 프로젝트의 리소스에 더 이상 액세스할 수 없습니다. 서비스 계정이 사용 중인지 잘 모르는 경우, Google은 서비스 계정을 삭제하기 전에 먼저 사용 중지하는 것을 권장합니다. 사용 중지된 서비스 계정은 필요한 경우 다시 사용할 수 있습니다.
예: VM에서 Cloud Storage 리소스에 액세스
storage.admin
역할이 있는 서비스 계정을 사용하도록 VM을 구성한 후에는 gcloud CLI 및 gsutil
과 같은 도구를 사용하여 Cloud Storage에 저장된 파일을 관리할 수 있습니다. Cloud Storage 리소스에 액세스하려면 다음을 완료합니다.
VM에 연결된 서비스 계정에
roles/storage.admin
역할이 있는지 확인합니다.VM이 커스텀 OS 이미지를 사용하는 경우 gcloud CLI를 설치합니다. 기본적으로 gcloud CLI는 Google Cloud에서 제공하는 대부분의 공개 OS 이미지에 설치됩니다.
VM에 연결합니다.
VM에서 다음 도구 중 하나를 사용하여 Cloud Storage 리소스를 관리합니다.
gsutil
사용- Google Cloud CLI 사용
다음 단계
- 서비스 계정을 사용하여 워크로드를 인증하는 방법 알아보기
- VM에 연결된 서비스 계정을 변경하는 방법 알아보기
- 서비스 계정 나열 및 수정 방법 알아보기
- 서비스 계정 작업 권장사항 검토 및 보안 위험 완화