이 문서에서는 모든 VM 또는 특정 컨테이너에 대한 외부 액세스를 차단하도록 Batch 작업을 구성하는 방법을 설명합니다.
네트워킹 요구사항을 충족하거나 보안을 개선하기 위해 작업에 대한 외부 액세스를 차단합니다. 다음 중 하나라도 해당하는 경우 외부 IP 주소가 없는 VM을 사용하여 작업의 VM에 대한 외부 액세스를 차단해야 합니다.
- 프로젝트가
compute.vmExternalIpAccess
조직 정책 제약조건에 의해 제한되는 경우 작업에 지정하는 네트워크가 비공개 Google 액세스를 사용하여 Google API 및 서비스에 대한 비공개 연결을 구성하는 경우. 비공개 Google 액세스는 외부 IP 주소가 있는 VM에는 영향을 주지 않습니다.
작업에 지정하는 네트워크가 Batch에 VPC 서비스 제어와 함께 비공개 Google 액세스를 사용하는 경우 VPC 서비스 제어 및 Batch 사용을 참조하세요.
또는 작업에 대한 모든 직접 외부 액세스를 차단하지 않으려면 작업이 실행되는 컨테이너의 외부 액세스를 차단할 수 있습니다.
네트워킹 개념과 네트워킹 구성 시기에 대한 자세한 내용은 Batch 네트워킹 개요를 참조하세요.
시작하기 전에
- Batch를 사용한 적이 없으면 Batch 시작하기를 검토하고 프로젝트 및 사용자 기본 요건을 완료하여 Batch를 사용 설정하세요.
-
외부 액세스를 차단하는 작업을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
프로젝트에 대한 일괄 작업 편집자(
roles/batch.jobsEditor
) -
기본적으로 기본 Compute Engine 서비스 계정인 작업의 서비스 계정에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser
) - 작업에 대한 네트워크 및 서브넷 식별: 프로젝트의 Compute 네트워크 뷰어(
roles/compute.networkViewer
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
-
프로젝트에 대한 일괄 작업 편집자(
-
작업의 VM에 대한 외부 액세스를 차단하는 경우 작업에 사용할 네트워크를 식별해야 합니다. VM에 대해 외부 액세스를 차단하는 작업에 지정하는 네트워크는 다음 요구사항을 충족해야 합니다.
- 네트워크는 작업과 동일한 프로젝트에 있는 Virtual Private Cloud(VPC) 네트워크이거나 작업의 프로젝트에서 호스팅되거나 공유되는 공유 VPC 네트워크입니다.
- 네트워크에는 작업을 실행할 위치에 서브네트워크(서브넷)가 포함되어 있습니다.
- 네트워크는 작업에 필요한 모든 액세스를 허용합니다. 작업의 VM에 대한 외부 액세스를 차단하는 경우 네트워크에서 Cloud NAT 또는 비공개 Google 액세스를 사용하여 작업에서 사용하는 API 및 서비스의 도메인에 대한 액세스를 허용해야 합니다. 예를 들어 모든 작업은 Batch API와 Compute Engine API를 사용하며 종종 Cloud Logging API를 사용합니다.
모든 VM에 대한 외부 액세스를 차단하는 작업 만들기
작업을 만들 때 작업 VM에 대한 외부 액세스를 차단합니다. 작업이 실행되는 모든 VM에 대한 외부 액세스를 차단할 경우 작업이 필요한 API에 액세스할 수 있게 해주는 네트워크와 서브넷을 지정해야 합니다.
이 작업을 만드는 동안 VM 인스턴스 템플릿을 사용하려면 VM 인스턴스 템플릿에서 네트워크를 지정하고 외부 IP 주소를 사용 중지해야 합니다. 그렇지 않은 경우 다음 단계에 따라 gcloud CLI 또는 Batch API를 사용하여 작업 VM에 대한 외부 액세스를 차단합니다.
gcloud
gcloud CLI를 사용하여 외부 액세스를 차단하는 작업을 만들려면 다음 옵션 중 하나를 선택합니다.
gcloud 플래그를 사용하여 모든 VM에 대한 외부 액세스 차단
작업을 만들고 gcloud 플래그를 사용하여 작업에 대한 외부 액세스를 차단하려면 다음 단계를 완료하세요.
작업의 구성 세부정보를 지정하는 JSON 파일을 만듭니다.
예를 들어 기본 스크립트 작업을 만들려면 다음 콘텐츠로 JSON 파일을 만듭니다.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." } } ] }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
gcloud batch jobs submit
명령어를 사용하여 작업을 만듭니다. 모든 VM의 외부 액세스를 차단하려면--no-external-ip-address
,--network
,--subnetwork
플래그를 포함합니다.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE \ --no-external-ip-address \ --network projects/HOST_PROJECT_ID/global/networks/NETWORK \ --subnetwork projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
다음을 바꿉니다.
JOB_NAME
: 이 작업의 이름LOCATION
: 이 작업의 위치JSON_CONFIGURATION_FILE
: 작업의 구성 세부정보가 포함된 JSON 파일의 경로HOST_PROJECT_ID
: 지정한 네트워크에서 프로젝트의 프로젝트 ID- 공유 VPC 네트워크를 사용하는 경우 호스트 프로젝트를 지정합니다.
- 그렇지 않으면 현재 프로젝트를 지정합니다.
NETWORK
: 현재 프로젝트에 있는 VPC 네트워크 또는 현재 프로젝트에서 호스팅되거나 공유되는 공유 VPC 네트워크의 이름REGION
: 작업의 서브넷 및 VM이 있는 리전- 작업의 VM에 허용되는 위치를 지정하기 위해
allowedLocations
필드를 포함하는 경우 여기에서 동일한 리전을 지정해야 합니다. - 그렇지 않으면 리전은 작업에 선택한 위치(
LOCATION
)와 동일해야 합니다.
- 작업의 VM에 허용되는 위치를 지정하기 위해
SUBNET
: VPC 네트워크에 속하며 작업의 VM과 동일한 리전에 있는 서브넷의 이름입니다.
JSON 필드를 사용하여 모든 VM에 대한 외부 액세스 차단
작업을 만들고 JSON 구성 파일의 필드를 사용하여 모든 VM에 대한 외부 액세스를 차단하려면 다음 단계를 완료하세요.
작업의 구성 세부정보를 지정하는 JSON 파일을 만듭니다. 모든 VM에 대한 외부 액세스를 차단하려면 다음을 수행합니다.
noExternalIpAddress
필드를true
로 설정합니다.network
및subnetwork
필드에 작업 네트워크를 지정합니다.
예를 들어 모든 VM에 대한 외부 액세스를 차단하는 기본 스크립트 작업을 만들려면 다음 콘텐츠가 포함된 JSON 파일을 만듭니다.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." } } ] }, "taskCount": 3 } ], "allocationPolicy": { "network": { "networkInterfaces": [ { "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET", "noExternalIpAddress": true } ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
다음을 바꿉니다.
HOST_PROJECT_ID
: 지정한 네트워크에서 프로젝트의 프로젝트 ID- 공유 VPC 네트워크를 사용하는 경우 호스트 프로젝트를 지정합니다.
- 그렇지 않으면 현재 프로젝트를 지정합니다.
NETWORK
: 이 작업에 필요한 액세스 권한을 제공하는 네트워크의 이름입니다. 네트워크는 현재 프로젝트의 VPC 네트워크이거나 현재 프로젝트에서 호스팅되거나 공유되는 공유 VPC 네트워크여야 합니다.REGION
: 작업의 서브넷 및 VM이 있는 리전입니다.- 작업의 VM에 허용되는 위치를 지정하기 위해
allowedLocations
필드를 포함하는 경우 여기에서 동일한 리전을 지정해야 합니다. - 그렇지 않으면 리전은 작업에 선택한 위치(
LOCATION
)와 동일해야 합니다.
- 작업의 VM에 허용되는 위치를 지정하기 위해
SUBNET
: VPC 네트워크에 속하며 작업의 VM과 동일한 리전에 있는 서브넷의 이름
gcloud batch jobs submit
명령어를 사용하여 작업을 만듭니다.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
다음을 바꿉니다.
JOB_NAME
: 이 작업에 사용할 이름입니다.LOCATION
: 이 작업에 사용할 위치입니다.JSON_CONFIGURATION_FILE
: 작업의 구성 세부정보가 포함된 JSON 파일의 경로입니다.
API
Batch API를 사용하여 작업을 만들려면 jobs.create
메서드를 사용하여 작업의 구성 세부정보를 지정합니다.
모든 VM에 대한 외부 액세스를 차단하려면 다음을 수행합니다.
noExternalIpAddress
필드를true
로 설정합니다.network
및subnetwork
필드에 작업 네트워크를 지정합니다.
예를 들어 모든 VM에 대한 외부 액세스를 차단하는 기본 스크립트 작업을 만들려면 다음 POST
요청을 수행합니다.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"network": {
"networkInterfaces": [
{
"network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
"subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
"noExternalIpAddress": true
}
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
다음을 바꿉니다.
PROJECT_ID
: 프로젝트의 프로젝트 ID입니다.LOCATION
: 이 작업에 사용할 위치입니다.JOB_NAME
: 이 작업에 사용할 이름입니다.HOST_PROJECT_ID
: 지정한 네트워크의 프로젝트의 프로젝트 ID입니다.- 공유 VPC 네트워크를 사용하는 경우 호스트 프로젝트를 지정합니다.
- 그렇지 않으면 현재 프로젝트(
PROJECT_ID
)를 지정합니다.
NETWORK
: 이 작업에 필요한 액세스 권한을 제공하는 네트워크의 이름입니다. 네트워크는 현재 프로젝트의 VPC 네트워크이거나 현재 프로젝트에서 호스팅되거나 공유되는 공유 VPC 네트워크여야 합니다.REGION
: 작업의 서브넷 및 VM이 있는 리전입니다.- 작업의 VM에 허용되는 위치를 지정하기 위해
allowedLocations
필드를 포함하는 경우 여기에서 동일한 리전을 지정해야 합니다. - 그렇지 않으면 리전은 작업에 선택한 위치(
LOCATION
)와 동일해야 합니다.
- 작업의 VM에 허용되는 위치를 지정하기 위해
SUBNET
: VPC 네트워크에 속하며 작업의 VM과 동일한 리전에 있는 서브넷의 이름입니다.
하나 이상의 컨테이너에 대한 외부 액세스를 차단하는 작업 만들기
작업을 만들 때 작업 컨테이너의 외부 액세스를 차단합니다.
gcloud CLI 또는 Batch API를 사용하여 모든 작업 컨테이너에 대한 외부 액세스를 차단할 수 있습니다.
gcloud
gcloud CLI를 사용하여 하나 이상의 컨테이너에 대한 외부 액세스를 차단하는 작업을 만들려면 다음 단계를 완료하세요.
작업의 구성 세부정보를 지정하는 JSON 파일을 만듭니다. 제한하려는 작업의 각 컨테이너에 대해
blockExternalNetwork
필드를true
로 설정합니다.예를 들어 컨테이너에 대한 외부 액세스를 차단하는 기본 컨테이너 작업을 만들려면 다음 콘텐츠가 포함된 JSON 파일을 만듭니다.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." ], "blockExternalNetwork": true } } ] }, "taskCount": 4, "parallelism": 2 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
gcloud batch jobs submit
명령어를 사용하여 작업을 만듭니다.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
다음을 바꿉니다.
JOB_NAME
: 이 작업에 사용할 이름입니다.LOCATION
: 이 작업에 사용할 위치입니다.JSON_CONFIGURATION_FILE
: 작업의 구성 세부정보가 포함된 JSON 파일의 경로입니다.
API
Batch API를 사용하여 작업을 만들려면 jobs.create
메서드를 사용하여 작업의 구성 세부정보를 지정합니다.
제한하려는 작업의 각 컨테이너에 대해 blockExternalNetwork
필드를 true
로 설정합니다.
예를 들어 컨테이너에 대한 외부 액세스를 차단하는 기본 컨테이너 작업을 만들려면 다음 POST
요청을 수행합니다.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
],
"blockExternalNetwork": true
}
}
]
},
"taskCount": 4,
"parallelism": 2
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
다음을 바꿉니다.
다음 단계
- 작업을 만들거나 실행하는 데 문제가 있는 경우 문제 해결 참조하기
- 네트워킹에 대해 자세히 알아보기
- 작업 만들기에 대해 자세히 알아보기
- 작업 및 태스크 보기에 대해 자세히 알아보기