1515
1616SA_TOKEN_PATH = os .environ .get ("SA_TOKEN_PATH" , "/var/run/secrets/eks.amazonaws.com/serviceaccount/token" )
1717AWS_ASSUME_ROLE = os .environ .get ("AWS_ASSUME_ROLE" )
18- AWS_REFRESH_CREDS_SEC = int (os .environ .get ("AWS_REFRESH_CREDS_SEC" , "900" )) # 15 minutes
1918
2019class AWSPrometheusConnect (CustomPrometheusConnect ):
2120 def __init__ (
@@ -32,43 +31,20 @@ def __init__(
3231 self .region = region
3332 self .service_name = service_name
3433
35- self ._initial_access_key = access_key
36- self ._initial_secret_key = secret_key
37- self ._initial_token = token
38- self ._has_static_keys = bool (access_key and secret_key )
39- self ._session = None
40- self ._credentials = None
34+ if access_key and secret_key :
35+ # Backwards compatibility: use static keys
36+ self ._credentials = Credentials (access_key , secret_key , token )
37+ else :
38+ # IRSA
39+ session = boto3 .Session ()
40+ creds = session .get_credentials ()
41+ if not creds :
42+ raise RuntimeError ("No AWS credentials found (neither static keys nor IRSA)" )
43+ self ._credentials = creds
4144
4245 role_to_assume = assume_role_arn or AWS_ASSUME_ROLE
43- self ._role_to_assume = role_to_assume
44-
45- self ._last_init_at = None
46-
47- self .init_credentials ()
48-
49- def init_credentials (self ) -> None :
50-
51- try :
52- if self ._has_static_keys :
53- self ._credentials = Credentials (self ._initial_access_key , self ._initial_secret_key , self ._initial_token )
54- self ._session = None
55- else :
56- # IRSA
57- session = boto3 .Session ()
58- creds = session .get_credentials ()
59- if not creds :
60- raise RuntimeError ("No AWS credentials found (neither static keys nor IRSA)" )
61- self ._credentials = creds
62- self ._session = session
63-
64- role_to_assume = self ._role_to_assume
65- if role_to_assume :
66- self ._assume_role (role_to_assume )
67-
68- self ._last_init_at = datetime .utcnow ()
69- except Exception :
70- logging .exception ("Failed to initialize credentials" )
71- raise
46+ if role_to_assume :
47+ self ._assume_role (role_to_assume )
7248
7349 def _assume_role (self , role_arn : str ) -> None :
7450 try :
@@ -99,12 +75,6 @@ def _assume_role(self, role_arn: str) -> None:
9975
10076 def _build_auth (self ) -> SigV4Auth :
10177 """Builds fresh SigV4 auth with current credentials (handles rotation)."""
102- try :
103- if self ._last_init_at is None or (datetime .utcnow () - self ._last_init_at ).total_seconds () >= AWS_REFRESH_CREDS_SEC :
104- logging .debug ("%d seconds passed; re-initializing AWS credentials" , AWS_REFRESH_CREDS_SEC )
105- self .init_credentials ()
106- except Exception :
107- logging .exception ("Time-based credential refresh failed" )
10878 frozen = self ._credentials .get_frozen_credentials ()
10979 return SigV4Auth (frozen , self .service_name , self .region )
11080
@@ -123,28 +93,6 @@ def signed_request(
12393 params = params ,
12494 )
12595
126- def _request_with_refresh (self , * , method , url , data = None , params = None , headers = None , verify = False ):
127- resp = self .signed_request (
128- method = method ,
129- url = url ,
130- data = data ,
131- params = params ,
132- verify = verify ,
133- headers = headers ,
134- )
135- if resp is not None and resp .status_code in (400 , 401 , 403 ):
136- logging .warning ("Auth failure %s, re-initializing credentials" , resp .status_code )
137- self .init_credentials ()
138- resp = self .signed_request (
139- method = method ,
140- url = url ,
141- data = data ,
142- params = params ,
143- verify = verify ,
144- headers = headers ,
145- )
146- return resp
147-
14896 def _custom_query (self , query : str , params : dict = None ):
14997 """
15098 Send a custom query to a Prometheus Host.
@@ -165,7 +113,7 @@ def _custom_query(self, query: str, params: dict = None):
165113 data = None
166114 query = str (query )
167115 # using the query API to get raw data
168- response = self ._request_with_refresh (
116+ response = self .signed_request (
169117 method = "POST" ,
170118 url = "{0}/api/v1/query" .format (self .url ),
171119 data = {** {"query" : query }, ** params },
@@ -204,7 +152,7 @@ def safe_custom_query_range(
204152 params = params or {}
205153
206154 query = str (query )
207- response = self ._request_with_refresh (
155+ response = self .signed_request (
208156 method = "POST" ,
209157 url = "{0}/api/v1/query_range" .format (self .url ),
210158 data = {
0 commit comments