Skip to content

Commit b60bb04

Browse files
authored
fix: update _SERVICE_ACCOUNT_EMAIL_PATTERN to require .gserviceaccount.com suffix (#17748)
Addresses issue where some environments provide something that is email-like but is NOT a service account email address when attempting to retrieve the compute SA
1 parent 3f9acf8 commit b60bb04

3 files changed

Lines changed: 125 additions & 53 deletions

File tree

packages/google-auth/google/auth/compute_engine/_metadata.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838

3939
_LOGGER = logging.getLogger(__name__)
4040

41-
_SERVICE_ACCOUNT_EMAIL_PATTERN = re.compile(r"^[^@]+@[^@]+\.[^@]+$")
41+
_SERVICE_ACCOUNT_EMAIL_PATTERN = re.compile(
42+
r"^[^@]+@[^@]+\.gserviceaccount\.com$", re.IGNORECASE
43+
)
4244

4345
_GCE_DEFAULT_MDS_IP = "169.254.169.254"
4446
_GCE_DEFAULT_HOST = "metadata.google.internal"

packages/google-auth/tests/compute_engine/test__metadata.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -993,9 +993,13 @@ def test__is_service_account_email():
993993
_metadata._is_service_account_email("my-sa@my-project.iam.gserviceaccount.com")
994994
is True
995995
)
996-
assert _metadata._is_service_account_email("test@example.com") is True
996+
assert (
997+
_metadata._is_service_account_email("my-sa@my-project.iam.GSERVICEACCOUNT.COM")
998+
is True
999+
)
9971000

9981001
# Empty inputs and standard string placeholders
1002+
assert _metadata._is_service_account_email("test@example.com") is False
9991003
assert _metadata._is_service_account_email("default") is False
10001004
assert _metadata._is_service_account_email("") is False
10011005
assert _metadata._is_service_account_email(None) is False

0 commit comments

Comments
 (0)