TLS バージョンを制限する

このページでは、Transport Layer Security(TLS)1.0 または 1.1 を使用して行われたリクエストを拒否することで、Google Cloud リソースへのアクセスを防止する方法を説明します。

概要

Google Cloud では、複数の TLS プロトコル バージョンがサポートされています。 コンプライアンス要件を満たすため、古い TLS バージョンを使用しているクライアントからの handshake リクエストを拒否する場合があります。これは、gcp.restrictTLSVersion 組織のポリシー制約を使用して行うことができます。

このgcp.restrictTLSVersion制約は、リソース階層内の組織、フォルダ、プロジェクトに適用できます。 この制約では、明示的な値を拒否し、他のすべての値を許可する拒否リストを使用します。許可リストを使用しようとするとエラーになります。

組織のポリシー階層の評価の動作により、TLS バージョン制限は指定されたリソースノードとそのすべての子に適用されます。たとえば、組織で TLS バージョン 1.0 を拒否すると、その組織からの子孫であるすべてのフォルダとプロジェクト(子)に対しても拒否されます。

子リソースの組織のポリシーを更新すると、継承された TLS バージョン制限をオーバーライドできます。たとえば、組織のポリシーが組織レベルで TLS 1.0 を拒否する場合、そのフォルダに別の組織のポリシーを設定することで子フォルダの制限を解除できます。フォルダに子がある場合、ポリシーの継承により、フォルダのポリシーが各子リソースにも適用されます。

準備

  • 組織のポリシーの設定、変更、削除を行うには、まず組織のポリシー管理者roles/orgpolicy.policyAdmin)Identity and Access Management(IAM)ロールを付与される必要があります。

TLS バージョンを制限する

1 つ以上の TLS バージョンを制限するには、次の手順を完了します。

コンソール

  1. 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_TYPEorganizationsfolders、または projects です。

  • RESOURCE_ID は、RESOURCE_TYPE で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号です。

次のコマンドを実行して、ポリシーが適用されていることを確認します。

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

次のように置き換えます。

  • RESOURCE_TYPEorganizationfolder、または project です。

  • RESOURCE_ID は、RESOURCE_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 は、mybucketname などのプロジェクトの Cloud Storage バケット名です。

  • TLS_VERSION は、構成されたポリシーで拒否された 1.01.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 バージョンの制限は、Google Front End(GFE) によって署名されたヘッダーを持つすべての Google Cloud リソース API でサポートされています。

サポートされていないサービス

TLS のバージョン制限に関する組織のポリシーの制約は、次のサービスには適用されません

  • App Engine(*.appspot.com
  • Cloud Run functions(*.cloudfunctions.net)、
  • Cloud Run(*.run.app
  • Private Service Connect
  • カスタム ドメイン

これらのサービスの TLS バージョンを制限するには、Cloud Load BalancingSSL ポリシーを使用します。また、事前定義された constraints/compute.requireSslPolicy 制約と SSL ポリシーのカスタム制約を使用して、ロードバランサに TLS バージョンと暗号スイートの制限を適用することもできます。

次のステップ