서비스 계정을 사용하여 정책 만들기

서비스 계정은 애플리케이션, 자동화된 프로세스 또는 컴퓨팅 워크로드(예: Compute Engine 인스턴스)가 승인된 API 호출을 수행하는 데 사용하는 특별한 비인간 Google 계정입니다. 사용자 계정과 달리 서비스 계정은 고유한 이메일 주소로만 식별됩니다.

애플리케이션은 서비스 계정을 사용하여Google Cloud 리소스에 대해 인증을 수행하고 액세스 권한을 얻습니다. 애플리케이션이 서비스 계정을 사용하여 인증되면 서비스 계정에 명시적 Identity and Access Management 권한이 할당된 리소스에 액세스할 수 있습니다. 이를 통해 감사 가능하고 중앙 집중식의 안전한 머신 간 승인 방법을 제공합니다.

Secure Web Proxy의 경우 서비스 계정은 승인 및 정책 시행에 중요한 역할을 합니다. 서비스 계정을 사용하여 워크로드의 트래픽 소스를 식별하면 IP 주소뿐만 아니라 애플리케이션의 ID를 기반으로 웹 트래픽을 구체적으로 허용하거나 거부하는 세부적인 Secure Web Proxy 정책을 만들 수 있습니다.

이 페이지에서는 다음을 수행하는 방법을 보여줍니다.

시작하기 전에

  • 초기 설정 단계를 완료합니다.

  • 조직 관리자에게 서비스 계정에 대한 액세스 권한을 부여해 달라고 요청합니다.

  • Google Cloud CLI 버전 406.0.0 이상이 설치되었는지 확인합니다.

    gcloud version | head -n1
    

    이전 gcloud CLI 버전이 설치되어 있는 경우 버전을 업데이트합니다.

    gcloud components update --version=406.0.0
    

빈 정책으로 Secure Web Proxy 인스턴스 만들기

Secure Web Proxy 인스턴스를 만들려면 먼저 빈 보안 정책을 만든 다음 정책을 사용하는 웹 프록시를 만들어야 합니다.

빈 보안 정책 만들기

콘솔

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

    SWP 정책으로 이동

  2. 정책 만들기를 클릭합니다.

  3. 이름 필드에 정책 이름(예: myswppolicy)을 입력합니다.

  4. 설명 필드에 정책에 대한 설명을 입력합니다(예: My new swp policy).

  5. 리전에서 정책을 만들 리전(예: us-central1)을 선택합니다.

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

Cloud Shell

  1. 원하는 텍스트 편집기를 사용하여 policy.yaml 파일을 만듭니다.

  2. 만든 policy.yaml 파일에 다음을 추가합니다.

    name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    description: POLICY_DESCRIPTION
    

    다음을 바꿉니다.

    • PROJECT_NAME: 프로젝트 이름

    • REGION: 정책이 생성된 리전(예: us-central1)

    • POLICY_NAME: 정책 이름

    • POLICY_DESCRIPTION: 정책에 대한 설명

  3. gcloud network-security gateway-security-policies import 명령어를 사용하여 보안 정책을 가져옵니다.

    gcloud network-security gateway-security-policies import POLICY_NAME \
        --source=POLICY_FILE.yaml \
        --location=REGION
    

웹 프록시 만들기

콘솔

  1. Google Cloud 콘솔에서 웹 프록시 페이지로 이동합니다.

    웹 프록시로 이동

  2. 보안 웹 프록시 만들기를 클릭합니다.

  3. 이름 필드에 웹 프록시의 이름(예: myswp)을 입력합니다.

  4. 설명 필드에 웹 프록시에 대한 설명(예: My new swp)을 입력합니다.

  5. 라우팅 모드에서 명시적 옵션을 선택합니다.

  6. 리전에서 웹 프록시를 만들 리전을 선택합니다(예: us-central1).

  7. 네트워크에서 웹 프록시를 만들 네트워크를 선택합니다.

  8. 서브네트워크에서 이전에 초기 설정 단계의 일부로 만든 VPC 서브넷을 선택합니다.

  9. (선택사항) 웹 프록시 IP 주소 필드에 Secure Web Proxy IP 주소를 입력합니다.

    이전 단계에서 만든 서브네트워크에 있는 Secure Web Proxy IP 주소 범위의 IP 주소를 입력할 수 있습니다. IP 주소를 입력하지 않으면 Secure Web Proxy 인스턴스가 선택한 서브네트워크에서 IP 주소를 자동으로 선택합니다.

  10. 인증서에서 웹 프록시를 만드는 데 사용할 인증서를 선택합니다.

  11. 정책에서 웹 프록시를 연결하기 위해 만든 정책을 선택합니다.

  12. 만들기를 클릭합니다.

Cloud Shell

  1. 원하는 텍스트 편집기를 사용하여 gateway.yaml 파일을 만듭니다.

  2. gateway.yaml 파일에 다음을 추가합니다.

    name: projects/PROJECT_NAME/locations/REGION/gateways/GATEWAY_NAME
    type: SECURE_WEB_GATEWAY
    ports: [GATEWAY_PORT_NUMBERS]
    certificateUrls: [CERTIFICATE_URLS]
    gatewaySecurityPolicy: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    network: projects/PROJECT_NAME/global/networks/NETWORK_NAME
    subnetwork: projects/PROJECT_NAME/regions/REGION/subnetworks/SUBNETWORK
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

    다음을 바꿉니다.

    • GATEWAY_NAME: 이 Secure Web Proxy 인스턴스의 이름

    • GATEWAY_PORT_NUMBERS: 이 게이트웨이의 포트 번호 목록(예: [80,443])

    • CERTIFICATE_URLS: SSL 인증서 URL 목록

    • SUBNETWORK: 이전에 초기 설정 단계의 일부로 만든 VPC 서브넷

    • GATEWAY_IP_ADDRESS: 이전에 초기 설정 단계에서 만든 프록시 서브넷 내의 Secure Web Proxy 인스턴스에 대한 IP 주소 목록(선택사항)

      IP 주소를 나열하지 않도록 선택한 경우 웹 프록시가 자동으로 IP 주소를 선택하도록 필드를 생략합니다.

  3. gcloud network-services gateways import 명령어를 사용하여 Secure Web Proxy 인스턴스를 만듭니다.

    gcloud network-services gateways import GATEWAY_NAME \
        --source=gateway.yaml \
        --location=REGION
    

연결 테스트

연결을 테스트하려면 Virtual Private Cloud (VPC) 네트워크 내의 모든 가상 머신 (VM) 인스턴스에서 curl 명령어를 사용합니다.

  curl -x https://GATEWAY_IP_ADDRESS:PORT_NUMBER https://www.example.com --proxy-insecure

모든 것이 올바르게 작동하면 Secure Web Proxy 인스턴스가 403 Forbidden 상태 코드를 반환합니다. 이 오류는 다음을 확인합니다.

  • Secure Web Proxy 인스턴스가 성공적으로 배포되었으며 트래픽을 수신하고 있습니다.

  • Secure Web Proxy 정책은 다음 섹션에서 특정 allow 규칙을 정의할 때까지 모든 트래픽을 거부하는 기본 보안 상황을 올바르게 적용합니다.

서비스 계정 만들기 및 IAM 역할 부여

  1. 서비스 계정 만들기: gcloud iam service-accounts create 명령어를 사용하여 Google Cloud프로젝트에서 my-swp-sa라는 서비스 계정을 만듭니다.

    gcloud iam service-accounts create my-swp-sa \
        --display-name="Secure Web Proxy service account" \
        --description="Service account for Secure Web Proxy instances"
  2. 서비스 계정에 IAM 역할 부여: gcloud projects add-iam-policy-binding 명령어를 사용하여 서비스 계정이 Google Cloud 프로젝트에서 리소스를 관리하거나 사용할 수 있도록 필요한 IAM 역할을 서비스 계정에 부여합니다.

    예를 들어 서비스 계정이 네트워크 리소스를 사용할 수 있도록 하려면 Compute 네트워크 사용자 역할(roles/compute.networkUser)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:my-swp-sa@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/compute.networkUser"

    PROJECT_ID를Google Cloud 프로젝트 ID로 바꿉니다.

Secure Web Proxy 규칙 만들기

콘솔

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

    SWP 정책으로 이동

  2. 이전에 만든 정책의 이름을 클릭합니다(예: myswppolicy).

  3. 규칙 추가를 클릭합니다.

  4. 각 규칙에 대해 다음을 수행합니다.

    1. 우선순위 필드에 규칙의 평가 순서(번호순)를 입력합니다. 규칙은 가장 높은 우선순위에서 가장 낮은 우선순위로 평가되며 0이 가장 높은 우선순위입니다.

    2. 이름 필드에 규칙 이름을 입력합니다.

    3. 설명 필드에 규칙에 대한 설명을 입력합니다.

    4. 작업에서 다음 옵션 중 하나를 선택합니다.

      • 허용: 규칙과 일치하는 연결 요청을 허용합니다.
      • 거부: 규칙과 일치하는 연결 요청을 거부합니다.
    5. 상태 필드에서 규칙 시행에 대한 다음 옵션 중 하나를 선택합니다.

      • 사용 설정됨: Secure Web Proxy 인스턴스에 규칙을 적용합니다.
      • 사용 중지됨: Secure Web Proxy 인스턴스에 규칙을 적용하지 않습니다.
    6. 세션 일치 섹션에서 이전에 만든 서비스 계정의 이메일 주소를 지정합니다. 예를 들면 다음과 같습니다.

        sessionMatcher: "source.matchServiceAccount(SERVICE_ACCOUNT) && host() == 'example.com'"
      

      SessionMatcher의 구문에 대한 자세한 내용은 CEL 일치자 언어 참조를 참고하세요.

    7. 애플리케이션 일치 섹션에서 요청을 일치시키는 기준을 지정합니다.

    8. 규칙 추가를 클릭합니다.

  5. 다른 규칙을 추가하려면 규칙 추가를 클릭합니다.

Cloud Shell

  1. 원하는 텍스트 편집기를 사용하여 rule.yaml 파일을 만듭니다.

  2. 적절한 서비스 계정의 URL에 대한 액세스를 허용하려면 만든 rule.yaml 파일에 다음을 추가합니다.

    name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME/rules/RULE_NAME
    description: RULE_DESCRIPTION
    enabled: true
    priority: RULE_PRIORITY
    sessionMatcher: CEL_EXPRESSION
    basicProfile: ALLOW
    

    다음을 바꿉니다.

    • RULE_NAME: 이 규칙의 이름
    • RULE_DESCRIPTION: 규칙에 대한 설명
    • RULE_PRIORITY: 이 규칙의 우선순위입니다. 숫자가 작을수록 우선순위가 높습니다.
    • CEL_EXPRESSION: Common Expression Language (CEL) 표현식입니다. 자세한 내용은 CEL 일치자 언어 참조를 참고하세요.

    예를 들어 필수 서비스 계정이 연결된 리소스에서 example.com에 대한 액세스를 허용하려면 sessionMatcher에 대해 만든 YAML 파일에 다음을 추가합니다.

    ```yaml
    sessionMatcher: "source.matchServiceAccount('SERVICE_ACCOUNT') && host() == 'example.com'"
    ```
    

    SERVICE_ACCOUNT를 허용하려는 서비스 계정으로 바꿉니다. 서비스 계정의 이메일 주소여야 합니다.

  3. gcloud network-security gateway-security-policies rules import 명령어를 사용하여 만든 규칙을 가져옵니다.

    gcloud network-security gateway-security-policies rules import RULE_NAME \
        --source=RULE_FILE.yaml \
        --location=REGION \
        --gateway-security-policy=POLICY_NAME
    

연결 테스트

연결을 다시 테스트하여 서비스 계정, 보안 정책 규칙, 게이트웨이를 비롯한 전체 Secure Web Proxy 구성이 의도한 대로 작동하는지 확인할 수 있습니다.

연결을 테스트하려면 연결된 SERVICE_ACCOUNT가 있는 리소스(예: VM 인스턴스)에서 curl 명령어를 사용합니다.

curl -x https://IPv4_ADDRESS:443 http://example.com 
--proxy-insecure

IPv4_ADDRESS를 Secure Web Proxy 인스턴스의 IPv4 주소로 바꿉니다.

모든 것이 올바르게 작동하면 200 OK 상태 코드가 수신됩니다. 이 상태 코드는 다음 주요 결과를 확인합니다.

  • 승인 성공: 리소스에서 시작된 트래픽이 할당된 서비스 계정으로 올바르게 식별되고 이 ID가 보안 정책에 추가한 allow 규칙과 일치함을 증명합니다.

  • 엔드 투 엔드 기능: 트래픽이 구성된 경로를 통해 올바르게 흐르는지 확인합니다. 리소스에서 Secure Web Proxy 인스턴스로 이동하고 보안 정책을 통과하여 외부 대상에 도달합니다.

다음 단계