aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/google-auth/py3/google
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2024-09-03 11:05:27 +0000
committerAlexander Smirnov <alex@ydb.tech>2024-09-03 11:05:27 +0000
commit8f71d7ed87007ace129f647b242a09d01773d3c5 (patch)
tree2c46ca9d89eb0ce5eea79ba1febb79e56efedb0f /contrib/python/google-auth/py3/google
parent78242bd5894abd6548e45731b464822da55a0796 (diff)
parent3da5a68ec3c329240e89bd0ed8c1c39e4359a693 (diff)
downloadydb-8f71d7ed87007ace129f647b242a09d01773d3c5.tar.gz
Merge branch 'rightlib' into mergelibs-240903-1104
Diffstat (limited to 'contrib/python/google-auth/py3/google')
-rw-r--r--contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py13
-rw-r--r--contrib/python/google-auth/py3/google/auth/transport/_mtls_helper.py40
-rw-r--r--contrib/python/google-auth/py3/google/auth/transport/grpc.py2
-rw-r--r--contrib/python/google-auth/py3/google/auth/transport/mtls.py17
-rw-r--r--contrib/python/google-auth/py3/google/auth/version.py2
5 files changed, 56 insertions, 18 deletions
diff --git a/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py b/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py
index 69b7b52458..b66d9f9b37 100644
--- a/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py
+++ b/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py
@@ -28,6 +28,7 @@ from google.auth import _helpers
from google.auth import environment_vars
from google.auth import exceptions
from google.auth import metrics
+from google.auth import transport
from google.auth._exponential_backoff import ExponentialBackoff
_LOGGER = logging.getLogger(__name__)
@@ -204,7 +205,17 @@ def get(
for attempt in backoff:
try:
response = request(url=url, method="GET", headers=headers_to_use)
- break
+ if response.status in transport.DEFAULT_RETRYABLE_STATUS_CODES:
+ _LOGGER.warning(
+ "Compute Engine Metadata server unavailable on "
+ "attempt %s of %s. Response status: %s",
+ attempt,
+ retry_count,
+ response.status,
+ )
+ continue
+ else:
+ break
except exceptions.TransportError as e:
_LOGGER.warning(
diff --git a/contrib/python/google-auth/py3/google/auth/transport/_mtls_helper.py b/contrib/python/google-auth/py3/google/auth/transport/_mtls_helper.py
index 6299e2bdea..68568dd603 100644
--- a/contrib/python/google-auth/py3/google/auth/transport/_mtls_helper.py
+++ b/contrib/python/google-auth/py3/google/auth/transport/_mtls_helper.py
@@ -23,7 +23,7 @@ import subprocess
from google.auth import exceptions
CONTEXT_AWARE_METADATA_PATH = "~/.secureConnect/context_aware_metadata.json"
-_CERTIFICATE_CONFIGURATION_DEFAULT_PATH = "~/.config/gcloud/certificate_config.json"
+CERTIFICATE_CONFIGURATION_DEFAULT_PATH = "~/.config/gcloud/certificate_config.json"
_CERTIFICATE_CONFIGURATION_ENV = "GOOGLE_API_CERTIFICATE_CONFIG"
_CERT_PROVIDER_COMMAND = "cert_provider_command"
_CERT_REGEX = re.compile(
@@ -48,21 +48,21 @@ _PASSPHRASE_REGEX = re.compile(
)
-def _check_dca_metadata_path(metadata_path):
- """Checks for context aware metadata. If it exists, returns the absolute path;
+def _check_config_path(config_path):
+ """Checks for config file path. If it exists, returns the absolute path with user expansion;
otherwise returns None.
Args:
- metadata_path (str): context aware metadata path.
+ config_path (str): The config file path for either context_aware_metadata.json or certificate_config.json for example
Returns:
str: absolute path if exists and None otherwise.
"""
- metadata_path = path.expanduser(metadata_path)
- if not path.exists(metadata_path):
- _LOGGER.debug("%s is not found, skip client SSL authentication.", metadata_path)
+ config_path = path.expanduser(config_path)
+ if not path.exists(config_path):
+ _LOGGER.debug("%s is not found.", config_path)
return None
- return metadata_path
+ return config_path
def _load_json_file(path):
@@ -136,7 +136,7 @@ def _get_cert_config_path(certificate_config_path=None):
if env_path is not None and env_path != "":
certificate_config_path = env_path
else:
- certificate_config_path = _CERTIFICATE_CONFIGURATION_DEFAULT_PATH
+ certificate_config_path = CERTIFICATE_CONFIGURATION_DEFAULT_PATH
certificate_config_path = path.expanduser(certificate_config_path)
if not path.exists(certificate_config_path):
@@ -279,14 +279,22 @@ def _run_cert_provider_command(command, expect_encrypted_key=False):
def get_client_ssl_credentials(
generate_encrypted_key=False,
context_aware_metadata_path=CONTEXT_AWARE_METADATA_PATH,
+ certificate_config_path=CERTIFICATE_CONFIGURATION_DEFAULT_PATH,
):
"""Returns the client side certificate, private key and passphrase.
+ We look for certificates and keys with the following order of priority:
+ 1. Certificate and key specified by certificate_config.json.
+ Currently, only X.509 workload certificates are supported.
+ 2. Certificate and key specified by context aware metadata (i.e. SecureConnect).
+
Args:
generate_encrypted_key (bool): If set to True, encrypted private key
and passphrase will be generated; otherwise, unencrypted private key
- will be generated and passphrase will be None.
+ will be generated and passphrase will be None. This option only
+ affects keys obtained via context_aware_metadata.json.
context_aware_metadata_path (str): The context_aware_metadata.json file path.
+ certificate_config_path (str): The certificate_config.json file path.
Returns:
Tuple[bool, bytes, bytes, bytes]:
@@ -297,7 +305,17 @@ def get_client_ssl_credentials(
google.auth.exceptions.ClientCertError: if problems occurs when getting
the cert, key and passphrase.
"""
- metadata_path = _check_dca_metadata_path(context_aware_metadata_path)
+
+ # 1. Check for certificate config json.
+ cert_config_path = _check_config_path(certificate_config_path)
+ if cert_config_path:
+ # Attempt to retrieve X.509 Workload cert and key.
+ cert, key = _get_workload_cert_and_key(cert_config_path)
+ if cert and key:
+ return True, cert, key, None
+
+ # 2. Check for context aware metadata json
+ metadata_path = _check_config_path(context_aware_metadata_path)
if metadata_path:
metadata_json = _load_json_file(metadata_path)
diff --git a/contrib/python/google-auth/py3/google/auth/transport/grpc.py b/contrib/python/google-auth/py3/google/auth/transport/grpc.py
index 9a817976d7..1ebe137957 100644
--- a/contrib/python/google-auth/py3/google/auth/transport/grpc.py
+++ b/contrib/python/google-auth/py3/google/auth/transport/grpc.py
@@ -302,7 +302,7 @@ class SslCredentials:
self._is_mtls = False
else:
# Load client SSL credentials.
- metadata_path = _mtls_helper._check_dca_metadata_path(
+ metadata_path = _mtls_helper._check_config_path(
_mtls_helper.CONTEXT_AWARE_METADATA_PATH
)
self._is_mtls = metadata_path is not None
diff --git a/contrib/python/google-auth/py3/google/auth/transport/mtls.py b/contrib/python/google-auth/py3/google/auth/transport/mtls.py
index c5707617ff..e7a7304f60 100644
--- a/contrib/python/google-auth/py3/google/auth/transport/mtls.py
+++ b/contrib/python/google-auth/py3/google/auth/transport/mtls.py
@@ -24,10 +24,19 @@ def has_default_client_cert_source():
Returns:
bool: indicating if the default client cert source exists.
"""
- metadata_path = _mtls_helper._check_dca_metadata_path(
- _mtls_helper.CONTEXT_AWARE_METADATA_PATH
- )
- return metadata_path is not None
+ if (
+ _mtls_helper._check_config_path(_mtls_helper.CONTEXT_AWARE_METADATA_PATH)
+ is not None
+ ):
+ return True
+ if (
+ _mtls_helper._check_config_path(
+ _mtls_helper.CERTIFICATE_CONFIGURATION_DEFAULT_PATH
+ )
+ is not None
+ ):
+ return True
+ return False
def default_client_cert_source():
diff --git a/contrib/python/google-auth/py3/google/auth/version.py b/contrib/python/google-auth/py3/google/auth/version.py
index c41f877658..297e18a45f 100644
--- a/contrib/python/google-auth/py3/google/auth/version.py
+++ b/contrib/python/google-auth/py3/google/auth/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "2.33.0"
+__version__ = "2.34.0"