VPC 서비스 제어(1세대) 구성
VPC 서비스 제어는 데이터 무단 반출을 방지하기 위해 보안 경계를 설정할 수 있는 Google Cloud 기능입니다. 이 가이드에서는 Cloud Run Functions와 함께 VPC 서비스 제어를 사용하여 함수에 보안을 추가하는 방법을 보여줍니다.
이 통합과 관련된 제한사항은 VPC 서비스 제어 문서를 참조하세요.
조직 수준 설정
Cloud Run Functions에 VPC 서비스 제어를 사용하려면 조직 수준에서 서비스 경계를 구성할 수 있습니다. 적절한 조직 정책을 구성하면 Cloud Run Functions를 사용할 때 VPC 서비스 제어 검사가 시행되며 개발자는 VPC 서비스 제어를 준수하는 서비스만 배포하도록 보장할 수 있습니다. 조직 정책을 설정할 때 상속성 및 위반에 대해 자세히 알아보세요.
VPC 서비스 제어 경계 설정
서비스 경계를 설정하려면 조직 뷰어(roles/resourcemanager.organizationViewer
)와 Access Context Manager 편집자(roles/accesscontextmanager.policyEditor
) 역할이 필요합니다.
VPC 서비스 제어 빠른 시작에 따라 다음을 수행합니다.
서비스 경계를 만듭니다.
경계에 하나 이상의 프로젝트를 추가합니다.
Cloud Functions API를 제한합니다.
서비스 경계를 설정한 후 제한된 API에 대한 모든 호출이 동일한 경계 내에서 발생한 호출인지 검사합니다.
선택항목: 개발 머신에 경계 액세스 사용 설정
VPC 서비스 제어 검사는 Cloud Functions API에 적용되기 때문에 Cloud Functions API에 대한 호출은 서비스 경계 내에서 발생하지 않는 한 실패합니다. 따라서 Cloud Functions API, Google Cloud 콘솔의 Cloud Run Functions UI 또는 Google Cloud CLI를 사용하여 함수를 관리하려면 다음 옵션 중 하나를 선택합니다.
VPC 서비스 제어 경계 안에서 머신을 사용합니다. 예를 들어 VPN을 사용하여 VPC 네트워크에 연결된 Compute Engine VM 또는 온프레미스 머신을 사용할 수 있습니다.
함수 개발자에게 경계에 대한 액세스 권한을 부여합니다. 예를 들어 IP 주소나 사용자 ID를 기준으로 경계 액세스를 허용하는 액세스 수준을 만들 수 있습니다. 자세한 내용은 서비스 경계 외부에서 보호된 리소스에 액세스 허용을 참조하세요.
조직 정책 설정
조직 정책을 관리하려면 조직 정책 관리자(roles/orgpolicy.policyAdmin
) 역할이 필요합니다.
VPC 서비스 제어를 준수하고 데이터 무단 반출을 방지하려면 서비스 경계에서 Cloud Run Functions에 허용되는 네트워크 설정을 제어하는 다음 조직 정책을 설정합니다.
허용되는 인그레스 설정 제한
cloudfunctions.allowedIngressSettings
조직 정책은 개발자가 Cloud Run Functions에 사용할 수 있는 인그레스 설정을 제어합니다. 개발자가 ALLOW_INTERNAL_ONLY
값을 사용하도록 이 조직 정책을 설정합니다.
콘솔
Google Cloud 콘솔에서 허용된 인그레스 설정 정책 페이지로 이동합니다.
정책 관리를 클릭합니다.
정책 수정 페이지에서 맞춤설정을 선택합니다.
정책 시행에서 교체를 선택합니다.
정책 값에서 커스텀을 선택합니다.
정책 유형에서 허용을 선택합니다.
커스텀 값 아래에
ALLOW_INTERNAL_ONLY
을 입력합니다.정책 설정을 클릭합니다.
gcloud
gcloud resource-manager org-policies allow
명령어를 사용합니다.
gcloud resource-manager org-policies allow \ cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_ONLY \ --organization ORGANIZATION_ID
여기서 ORGANIZATION_ID
는 조직 ID입니다.
이 조직 정책을 적용한 후에는 모든 함수가 인그레스 설정에 ALLOW_INTERNAL_ONLY
값을 사용해야 합니다. 즉, HTTP 함수는 서비스 경계 내의 VPC 네트워크에서 발생하는 트래픽만 허용할 수 있습니다. 다른 값을 지정하는 함수 배포는 실패합니다.
VPC 커넥터 필요
cloudfunctions.requireVPCConnector
조직 정책은 함수에 서버리스 VPC 액세스 커넥터가 필요한지 여부를 제어합니다. 이 조직 정책을 설정하여 다음과 같은 제약조건을 적용합니다.
콘솔
Google Cloud 콘솔에서 VPC 커넥터 필요 정책 페이지로 이동합니다.
정책 관리를 클릭합니다.
정책 수정 페이지에서 맞춤설정을 선택합니다.
시행에서 사용을 선택합니다.
정책 설정을 클릭합니다.
gcloud
gcloud resource-manager org-policies enable-enforce
명령어를 사용합니다.
gcloud resource-manager org-policies enable-enforce \ cloudfunctions.requireVPCConnector \ --organization ORGANIZATION_ID
여기서 ORGANIZATION_ID
는 조직 ID입니다.
이 조직 정책을 적용한 후에는 모든 함수가 서버리스 VPC 액세스 커넥터를 사용해야 합니다. 커넥터를 지정하지 않은 함수 배포는 실패합니다.
허용되는 VPC 커넥터 이그레스 설정 제한
cloudfunctions.allowedVpcConnectorEgressSettings
조직 정책은 개발자가 Cloud Run Functions에 사용할 수 있는 이그레스 설정을 제어합니다. ALL_TRAFFIC
값만 허용하도록 이 조직 정책을 설정합니다.
콘솔
Google Cloud 콘솔에서 허용되는 VPC 커넥터 이그레스 설정 정책 페이지로 이동합니다.
정책 관리를 클릭합니다.
정책 수정 페이지에서 맞춤설정을 선택합니다.
정책 시행에서 교체를 선택합니다.
정책 값에서 커스텀을 선택합니다.
정책 유형에서 허용을 선택합니다.
커스텀 값 아래에
ALL_TRAFFIC
을 입력합니다.정책 설정을 클릭합니다.
gcloud
gcloud resource-manager org-policies allow
명령어를 사용합니다.
gcloud resource-manager org-policies allow \ cloudfunctions.allowedVpcConnectorEgressSettings ALL_TRAFFIC \ --organization ORGANIZATION_ID
여기서 ORGANIZATION_ID
는 조직 ID입니다.
이 조직 정책을 적용한 후에는 모든 함수가 이그레스 설정에 ALL_TRAFFIC
값을 사용해야 합니다. 즉, 함수는 VPC 네트워크를 통해 모든 이그레스 트래픽을 라우팅해야 합니다. 다른 값을 지정하는 함수 배포는 실패합니다.
cloudfunctions.requireVPCConnector
조직 정책과 결합하면 모든 이그레스 트래픽이 구성된 방화벽 및 라우팅 규칙이 적용되는 VPC 네트워크를 통과하도록 강제됩니다.
프로젝트 수준 설정
서비스 경계 내의 개별 프로젝트의 경우 VPC 서비스 제어를 사용하려면 추가 구성을 수행해야 합니다.
VPC 네트워크 구성
Google API 및 서비스에 액세스할 때 데이터 무단 반출 위험을 완화하려면 요청을 제한된 가상 IP(VIP) 범위인 199.36.153.4/30
(restricted.googleapis.com
)으로 전송해야 합니다.
프로젝트의 VPC 네트워크마다 제한된 VIP 범위에 대한 트래픽을 제외한 아웃바운드 트래픽을 차단하려면 다음 안내를 따르세요.
데이터가 VPC 네트워크에서 나가는 것을 방지하도록 방화벽 규칙을 구성합니다.
모든 아웃바운드 트래픽을 차단하는 이그레스 거부 규칙을 만듭니다.
TCP 포트 443에
199.36.153.4/30
으로 트래픽을 허용하는 이그레스 허용 규칙을 만듭니다. 이 규칙이 방금 만든 이그레스 거부 규칙보다 우선순위가 높은지 확인합니다. 이렇게 하면 제한된 VIP 범위로만 송신할 수 있습니다.
*.googleapis.com
을restricted.googleapis.com
으로 변환하도록 DNS를 구성합니다.*.cloudfunctions.net
을199.36.153.4/30
IP 범위로 매핑하는 A 레코드를 사용하여 DNS를 구성합니다. Cloud DNS를 사용하여 다음 작업을 수행할 수 있습니다.gcloud dns managed-zones create ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/VPC_NAME \ --description=none \ --dns-name=cloudfunctions.net gcloud dns record-sets transaction start --zone=ZONE_NAME gcloud dns record-sets transaction add --name=*.cloudfunctions.net. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=ZONE_NAME
VPC 커넥터의 서브넷에 비공개 Google 액세스를 사용 설정합니다.
이 시점에서 VPC 네트워크 내에서 발생하는 요청은 다음과 같습니다.
- VPC 네트워크를 나갈 수 없으므로 서비스 경계 외부의 이그레스를 차단합니다.
- VPC 서비스 제어를 검사하는 Google API 및 서비스에만 도달하므로 Google API를 통한 유출을 방지합니다.
Cloud Build 서비스 계정에 VPC 서비스 제어 경계에 대한 액세스 권한 부여
Cloud Run Functions는 Cloud Build를 사용하여 소스 코드를 실행 가능한 컨테이너에 빌드합니다. VPC 서비스 제어와 함께 Cloud Run Functions를 사용하려면 서비스 경계에 액세스할 수 있도록 Cloud Build 서비스 계정을 구성해야 합니다.
서비스 계정 이름 찾기
Google Cloud 콘솔의 IAM 페이지를 사용하여 Cloud Build 서비스 계정을 찾습니다.
프로젝트 드롭다운에 올바른 프로젝트가 표시되었는지 확인합니다.
cloudbuild.gserviceaccount.com
을 검색합니다.PROJECT_NUMBER@cloudbuild.gserviceaccount.com
형식의 이메일 주소는 서비스 계정 이름입니다.
서비스 계정에 서비스 경계에 대한 액세스 권한 부여
서비스 계정 이름이 있으면 사용자 또는 서비스 계정별 액세스 제한의 가이드에 따라 서비스 계정의 액세스 수준을 만듭니다. 그런 후 기존 경계에 액세스 수준 추가에 따라 서비스 경계에 액세스 수준을 추가합니다.
VPC 서비스 제어를 준수하는 함수 배포
Cloud Run Functions에 VPC 서비스 제어를 구성한 후에는 서비스 경계 내에 배포된 모든 함수가 지정된 조직 정책을 준수하는지 확인해야 합니다. 다시 말하면 다음과 같습니다.
- 모든 함수는 서버리스 VPC 액세스 커넥터를 사용해야 합니다. 자세한 내용은 VPC 네트워크에 연결을 참조하세요.
- 모든 함수는 내부 소스의 트래픽만 허용해야 합니다. 자세한 내용은 인그레스 설정을 참조하세요.
- 모든 함수는 VPC 네트워크를 통해 모든 발신 트래픽을 라우팅해야 합니다. 자세한 내용은 이그레스 설정을 참조하세요.
이 기준을 충족하지 않는 함수 배포는 실패합니다.
기존 함수를 감사하여 VPC 서비스 제어 규정 준수 확인
VPC 서비스 제어를 설정한 후 서비스 경계 내부의 프로젝트에서 새 함수를 만들면 해당 함수에 대한 규정 준수 여부가 자동으로 검사됩니다. 하지만 기존 워크로드의 중단을 방지하기 위해 기존 함수는 계속 작동하며 조직 정책을 준수하지 않을 수 있습니다.
필요한 경우 기존 함수를 감사하고 함수를 업데이트하거나 다시 배포하는 것이 좋습니다. 이 과정을 원활하게 진행하기 위해 Cloud Functions API를 사용하여 함수를 나열하고 적절한 네트워크 설정을 지정하지 않는 함수를 강조표시하는 스크립트를 만들 수 있습니다.
경계 외부 함수에 VPC 서비스 제어 사용
앞의 섹션은 VPC 서비스 제어 서비스 경계 내에서 Cloud Run Functions를 배포하는 시나리오에 적용됩니다.
서비스 경계 외부의 함수를 배포해야 하지만 함수에 경계 내부 리소스에 대한 액세스가 필요한 경우 다음 구성을 사용합니다.
- Cloud Build 서비스 계정에 VPC 서비스 제어 경계에 대한 액세스 권한을 부여합니다.
- 함수의 런타임 서비스 계정에 경계에 대한 액세스 권한을 부여합니다. 이렇게 하려면 액세스 수준 만들기 및 서비스 계정에 액세스 수준 추가를 수행하거나 경계에서 인그레스 정책 만들기를 수행하면 됩니다.
- VPC 네트워크에 기능을 연결합니다.
- VPC 네트워크를 통해 기능의 모든 송신 트래픽을 라우팅합니다. 자세한 내용은 이그레스 설정을 참조하세요.
이 구성을 완료하면 함수에서 경계로 보호되는 리소스에 연결할 수 있습니다.