連接到GCP秘密管理器時SSL異常

GCP秘密管理器要求在集群上安裝GCM密碼套件。Databricks Runtime 10.4 LTS及以上版本默認啟用了GCM密碼套件。

寫的約翰。Lourdu

最後發布時間:2023年1月20日
刪除

信息

本文適用於使用Databricks Runtime 7.3 LTS和9.1 LTS的集群。

問題

存儲在GCP秘密管理器服務中的秘密可以使用google-cloud-secret-manager客戶端庫。

您的代碼可能會失敗SSLHandshakeExceptionDatabricks Runtime 9.1 LTS及以下版本的錯誤消息。

示例代碼:

進口com.google.cloud.secretmanager.v1.AccessSecretVersionResponse;進口com.google.cloud.secretmanager.v1.ProjectName;進口com.google.cloud.secretmanager.v1.Replication;進口com.google.cloud.secretmanager.v1.Secret;進口com.google.cloud.secretmanager.v1.SecretManagerServiceClient;進口com.google.cloud.secretmanager.v1.SecretPayload;進口com.google.cloud.secretmanager.v1.SecretVersion;進口com.google.protobuf.ByteString;進口com.google.cloud.secretmanager.v1.SecretName;進口com.google.cloud.secretmanager.v1。SecretManagerServiceSettings import com.google.api.gax.core.FixedCredentialsProvider; import com.google.auth.Credentials def access_secret_version(secret_id, version_id="latest"): # Create the Secret Manager client. client = secretmanager.SecretManagerServiceClient() # Build the resource name of the secret version. name = f"projects/{PROJECT_ID}/secrets/{secret_id}/versions/{version_id}" # Access the secret version. response = client.access_secret_version(name=name) # Return the decoded payload. return response.payload.data.decode('UTF-8') import hashlib def secret_hash(secret_value): # return the sha224 hash of the secret value return hashlib.sha224(bytes(secret_value, "utf-8")).hexdigest()

錯誤信息:

UnavailableException: io.grpc. statusruntimeexception: UNAVAILABLE: io異常
通道管道:[SslHandler#0,協議談判者$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]原因:StatusRuntimeException: UNAVAILABLE: io exception通道管道:[SslHandler#0,協議談判者$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]原因:SSLHandshakeException:沒有適當的協議(協議被禁用或密碼組件不合適)io.grpc. statusruntimeexception: UNAVAILABLE: io exception ChannelPipeline: [SslHandler#0, protocol談判者$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]原因:javax.net.ssl.SSLHandshakeException: No適當的協議(協議被禁用或密碼組件不合適)at sun.security.ssl.HandshakeContext.(HandshakeContext.java:171)

導致

在Databricks Runtime 9.1 LTS及以下版本上,默認情況下不啟用GCM (Galois/Counter Mode)密碼套件。

如果沒有GCM密碼套件,就沒有可用的協議來建立到GCP秘密管理器的預期SSL連接。

您可以使用nmap實用程序來驗證外部服務器需要哪些密碼套件。

%sh nmap——script ssl-enum-cipher -p 443 secretmanager.googleapis.com

刪除

信息

如果nmap未安裝,運行Sudo apt-get install -y nmap在您的集群上安裝它。

解決方案

必須啟用GCM密碼套件才能連接到GCP秘密管理器服務。

如果您升級到Databricks Runtime 10.4 LTS及以上版本,則默認啟用GCM密碼套件。

如果您使用的是Databricks Runtime 9.1 LTS及以下版本,您應該按照啟用GCM密碼套件知識庫文章介紹如何在集群上安裝GCM密碼套件。

一旦啟用了GCM密碼套件,就可以連接到GCP秘密管理器服務。

這篇文章有用嗎?