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

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

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

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

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

시작하기 전에

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

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

빈 보안 정책 만들기

콘솔

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

    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. 라우팅 모드에서 다음 옵션 중 하나를 선택합니다.

    • 명시적: Secure Web Proxy 인스턴스를 명시적 프록시 모드로 배포합니다.
    • 다음 홉: Secure Web Proxy 인스턴스를 다음 홉 모드로 배포합니다.
  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
    routingMode: ROUTING_MODE
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

    선택사항: 다른 Google Cloud 리전의 클라이언트 애플리케이션이 프록시에 연결하도록 허용하려면 Secure Web Proxy 인스턴스를 만들 때 전역 액세스를 사용 설정합니다.

    gateway.yaml 파일에서 allow_global_access 필드를 추가하고 true로 설정합니다.

    중요: allow_global_access는 보안 웹 프록시 인스턴스를 만들 때만 사용 설정할 수 있습니다. 이 설정은 나중에 구성할 수 없습니다.

    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
    allow_global_access: true
    

    다음을 바꿉니다.

  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 명령어를 사용하여 서비스 계정에 필요한 IAM 역할을 부여하여 프로젝트의 리소스를 관리하거나 사용할 수 있도록 합니다. Google Cloud

    예를 들어 서비스 계정에서 네트워크 리소스를 사용할 수 있도록 하려면 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를 프로젝트 ID로 바꿉101Google Cloud 니다.

Secure Web Proxy 규칙 만들기

콘솔

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

    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 인스턴스 > 보안 정책 통과 > 외부 대상에 도달)를 통해 올바르게 흐르는지 확인합니다.

다음 단계