TLS 버전 제한

이 페이지에서는 전송 계층 보안(TLS) 1.0 또는 1.1을 사용하여 수행된 요청을 거부하여 Google Cloud 리소스에 대한 액세스를 방지하는 방법을 설명합니다.

개요

Google Cloud는 여러 TLS 프로토콜 버전을 지원합니다. 규정 준수 요구사항을 충족하기 위해 이전 TLS 버전을 사용하는 클라이언트의 핸드셰이크 요청을 거부해야 할 수 있습니다. 이렇게 하려면 gcp.restrictTLSVersion 조직 정책 제약조건을 사용하면 됩니다.

gcp.restrictTLSVersion 제약조건은 리소스 계층 구조의 조직, 폴더 또는 프로젝트에 적용될 수 있습니다. 이 제약조건은 명시적 값을 거부하고 다른 모든 값을 허용하는 거부 목록을 사용합니다. 허용 목록을 사용하려고 하면 오류가 발생합니다.

조직 정책 계층 구조 평가의 동작으로 인해 TLS 버전 제한은 지정된 리소스 노드 및 모든 하위 항목에 적용됩니다. 예를 들어 조직의 TLS 버전 1.0을 거부하면 해당 조직에서 비롯된 모든 폴더 및 프로젝트(하위)에도 거부됩니다.

하위 리소스의 조직 정책을 업데이트하여 상속된 TLS 버전 제한을 재정의할 수 있습니다. 예를 들어 조직 정책이 조직 수준에서 TLS 1.0을 거부하는 경우 해당 폴더에 별도의 조직 정책을 설정하여 하위 폴더에 대한 제한을 삭제할 수 있습니다. 폴더에 하위 항목이 있는 경우 정책 상속으로 인해 폴더의 정책이 각 하위 리소스에도 적용됩니다.

시작하기 전에

  • 조직 정책을 설정, 변경 또는 삭제하려면 먼저 조직 정책 관리자(roles/orgpolicy.policyAdmin) Identity and Access Management(IAM) 역할을 부여받아야 합니다.

TLS 버전 제한

하나 이상의 TLS 버전을 제한하려면 다음 단계를 완료하세요.

콘솔

  1. Google Cloud 콘솔에서 조직 정책 페이지를 엽니다.

    조직 정책으로 이동

  2. 페이지 상단의 프로젝트 선택 도구를 선택합니다.

  3. 프로젝트 선택 도구에서 조직 정책을 설정할 리소스를 선택합니다.

  4. 조직 정책 페이지의 목록에서 TLS 버전 제한 제약조건을 선택합니다.

  5. 이 리소스의 조직 정책을 업데이트하려면 수정을 클릭합니다.

  6. 수정 페이지에서 맞춤설정을 선택합니다.

  7. 정책 시행에서 시행 옵션을 선택합니다.

    • 조직 정책을 병합하고 평가하려면 상위 요소와 병합을 선택합니다. 상속과 리소스 계층 구조에 대한 자세한 내용은 계층 구조 평가 이해를 참조하세요.

    • 상위 리소스에서 상속된 정책을 재정의하려면 바꾸기를 선택합니다.

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

  9. 정책 값에서 기본값은 모두 거부로 설정됩니다. 대신 커스텀을 선택합니다.

  10. 정책 유형에서 거부를 선택합니다.

  11. 커스텀 값에 거부할 TLS 버전을 입력합니다. 다음 값은 유효한 커스텀 값입니다.

    • TLS 1.0의 경우 TLS_VERSION_1
    • TLS 1.1의 경우 TLS_VERSION_1_1

    둘 이상의 TLS 버전을 제한하는 경우 값 추가를 클릭하고 추가 필드에 값을 입력합니다.

  12. 조직 정책을 완료하고 적용하려면 저장을 클릭합니다.

gcloud

gcloud org-policies set-policy 명령어를 사용하여 리소스에 조직 정책을 설정합니다.

gcloud org-policies set-policy POLICY_PATH

POLICY_PATH는 조직 정책 파일의 전체 경로이며 YAML 형식을 사용하는 경우 다음과 같이 표시됩니다.

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictTLSVersion
spec:
  rules:
  - values:
    deniedValues:
    - TLS_VERSION_1
    - TLS_VERSION_1_1

다음으로 대체합니다.

  • RESOURCE_TYPEorganizations, folders 또는 projects입니다.

  • RESOURCE_IDRESOURCE_TYPE에 지정된 리소스 유형에 따라 조직 ID, 폴더 ID, 프로젝트 ID 또는 프로젝트 번호입니다.

다음 명령어를 실행하여 정책이 적용되었는지 확인합니다.

gcloud org-policies describe gcp.restrictTLSVersion --RESOURCE_TYPE=RESOURCE_ID --effective

다음으로 대체합니다.

  • RESOURCE_TYPEorganization, folder 또는 project입니다.

  • RESOURCE_IDRESOURCE_TYPE에 지정된 리소스 유형에 따라 조직 ID, 폴더 ID, 프로젝트 ID 또는 프로젝트 번호입니다.

정책 테스트

TLS 버전 제한 정책 제약조건은 모든 범위 내 서비스에서 테스트될 수 있습니다. 다음 curl 명령어 예시는 Cloud Storage 버킷에 대한 TLS 버전 제한을 검증합니다.

  curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/GCS_BUCKET_NAME/o" \
  --tlsvTLS_VERSION --tls-max TLS_VERSION --ciphers DEFAULT@SECLEVEL=0

--tlsv와 값 사이에는 공백이 없습니다. 예를 들면 --tlsv1.1입니다.

다음으로 대체합니다.

  • GCS_BUCKET_NAME은 프로젝트의 Cloud Storage 버킷 이름입니다(예: mybucketname).

  • TLS_VERSION은 구성된 정책에서 거부된 1.0 또는 1.1과 같은 TLS 버전입니다.

다음 curl 요청 예시에서는 GCS_BUCKET_NAMEmybucketname으로 설정되고 TLS_VERSION1.1로 설정된 것을 보여줍니다.

  curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/mybucketname/o" \
  --tlsv1.1 --tls-max 1.1 --ciphers DEFAULT@SECLEVEL=0

조직 정책이 TLS_VERSION_X를 제한하도록 구성된 경우 이 예시 명령어의 정책 제한 프로젝트에서 TLS_VERSION_X로 리소스에 액세스하려고 시도하면 실패합니다. 이 실패 이유를 설명하는 오류 메시지가 반환됩니다.

Request is disallowed by organization's constraints/gcp.restrictTLSVersion
constraint for 'projects/PROJECT_NUMBER' to use service
'SERVICE_NAME.googleapis.com' by violated TLS version `TLS_VERSION_X`

이 출력에는 다음 값이 포함됩니다.

  • PROJECT_NUMBER: 이전 명령어에서 참조한 리소스를 호스팅하는 프로젝트 번호입니다.
  • SERVICE_NAME: TLS 제한 정책에서 차단한 범위 내 서비스의 이름입니다.

지원되는 서비스

TLS 버전 제한은 다음 서비스에서 지원됩니다.

  • apigateway.googleapis.com
  • appengine.googleapis.com
  • artifactregistry.googleapis.com
  • assuredworkloads.googleapis.com
  • bigquery.googleapis.com
  • bigqueryreservation.googleapis.com
  • bigtableadmin.googleapis.com
  • binaryauthorization.googleapis.com
  • cloudasset.googleapis.com
  • cloudbuild.googleapis.com
  • clouddebugger.googleapis.com
  • cloudfunctions.googleapis.com
  • cloudkms.googleapis.com
  • cloudresourcemanager.googleapis.com
  • cloudscheduler.googleapis.com
  • cloudsearch.googleapis.com
  • cloudtasks.googleapis.com
  • cloudtrace.googleapis.com
  • composer.googleapis.com
  • compute.googleapis.com
  • container.googleapis.com
  • containeranalysis.googleapis.com
  • datacatalog.googleapis.com
  • dataflow.googleapis.com
  • datafusion.googleapis.com
  • datalabeling.googleapis.com
  • datamigration.googleapis.com
  • dataproc.googleapis.com
  • datastore.googleapis.com
  • deploymentmanager.googleapis.com
  • dialogflow.googleapis.com
  • discoveryengine.googleapis.com
  • dlp.googleapis.com
  • dns.googleapis.com
  • domains.googleapis.com
  • file.googleapis.com
  • firebaserules.googleapis.com
  • firestore.googleapis.com
  • genomics.googleapis.com
  • healthcare.googleapis.com
  • iam.googleapis.com
  • iamcredentials.googleapis.com
  • iap.googleapis.com
  • identitytoolkit.googleapis.com
  • jobs.googleapis.com
  • language.googleapis.com
  • lifesciences.googleapis.com
  • logging.googleapis.com
  • managedidentities.googleapis.com
  • memcache.googleapis.com
  • metastore.googleapis.com
  • ml.googleapis.com
  • monitoring.googleapis.com
  • networkmanagement.googleapis.com
  • notebooks.googleapis.com
  • osconfig.googleapis.com
  • policytroubleshooter.googleapis.com
  • privateca.googleapis.com
  • pubsub.googleapis.com
  • pubsublite.googleapis.com
  • recommender.googleapis.com
  • redis.googleapis.com
  • retail.googleapis.com
  • run.googleapis.com
  • runtimeconfig.googleapis.com
  • secretmanager.googleapis.com
  • servicecontrol.googleapis.com
  • servicedirectory.googleapis.com
  • servicenetworking.googleapis.com
  • sourcerepo.googleapis.com
  • spanner.googleapis.com
  • sqladmin.googleapis.com
  • storage.googleapis.com

  • storagetransfer.googleapis.com

  • sts.googleapis.com

  • texttospeech.googleapis.com

  • tpu.googleapis.com

  • videointelligence.googleapis.com

  • vision.googleapis.com

  • workflowexecutions.googleapis.com

  • workflows.googleapis.com

미지원 서비스

TLS 버전 제한 조직 정책 제약조건은 다음 서비스에는 적용되지 않습니다.

  • App Engine(*.appspot.com)
  • Cloud Functions(*.cloudfunctions.net),
  • Cloud Run(*.run.app)
  • Private Service Connect
  • 커스텀 도메인

이러한 서비스의 TLS 버전을 제한하려면 SSL 정책과 함께 Cloud Load Balancing을 사용합니다. 또한 SSL 정책의 커스텀 제약조건과 함께 사전 정의된 constraints/compute.requireSslPolicy 제약조건을 사용하여 부하 분산기에 대한 TLS 버전 및 암호화 스위트 제한사항을 적용할 수도 있습니다.

다음 단계