Skip to content

Commit 85e4d38

Browse files
committed
fix(KMS)!: bug with listing keys that were not generated by plugin
BREAKING CHANGE: bug work-around requires migrating to new alias
1 parent 590866d commit 85e4d38

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

ape_aws/kms/client.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,22 @@ class KmsKey(BaseModel):
7272

7373
@field_validator("cached_alias")
7474
def prune_alias_prepend(cls, value: str):
75-
return value.replace("alias/", "")
75+
return value.replace("alias/ape-aws/v1/", "")
7676

7777
@property
7878
def alias(self) -> str:
7979
if self.cached_alias is not None:
8080
return self.cached_alias
8181

8282
response = self.kms_client.list_aliases(KeyId=self.id)
83-
self.cached_alias = response["Aliases"][0]["AliasName"].replace("alias/", "")
83+
self.cached_alias = response["Aliases"][0]["AliasName"].replace("alias/ape-aws/v1/", "")
8484
assert isinstance(self.cached_alias, str) # mypy
8585
return self.cached_alias
8686

8787
@alias.setter # type: ignore[attr-defined]
8888
def set_alias(self, alias: str):
8989
self.kms_client.update_alias(
90-
AliasName=f"alias/{alias}",
90+
AliasName=f"alias/ape-aws/v1/{alias}",
9191
TargetKeyId=self.id,
9292
KeyUsage="SIGN_VERIFY",
9393
)
@@ -160,7 +160,7 @@ def sign(self, msghash: bytes) -> bytes:
160160

161161
def delete(self, days: int = 30):
162162
if self.alias:
163-
self.kms_client.delete_alias(AliasName=f"alias/{self.alias}")
163+
self.kms_client.delete_alias(AliasName=f"alias/ape-aws/v1/{self.alias}")
164164

165165
self.kms_client.schedule_key_deletion(
166166
KeyId=self.id,
@@ -181,7 +181,8 @@ def keys(self) -> dict[str, KmsKey]:
181181
paginator = self.kms_client.get_paginator("list_aliases")
182182
pages = map(lambda data: data["Aliases"], paginator.paginate())
183183
# NOTE: Use `itertools.chain` since it is segmented into list of lists
184-
key_data = filter(lambda page: "TargetKeyId" in page, chain(*pages))
184+
# NOTE: Just look for `alias/ape-aws/` alias in case we add v2, v3, etc.
185+
key_data = filter(lambda k: k["AliasName"].startswith("alias/ape-aws/"), chain(*pages))
185186
keys = map(KmsKey.model_validate, key_data)
186187
return {key.alias: key for key in keys}
187188

@@ -200,7 +201,7 @@ def generate_key(self, alias: str) -> KmsKey:
200201

201202
self.kms_client.create_alias(
202203
TargetKeyId=key.id,
203-
AliasName=f"alias/{alias}",
204+
AliasName=f"alias/ape-aws/v1{alias}",
204205
)
205206

206207
key.cached_alias = alias
@@ -230,7 +231,7 @@ def import_key(self, alias: str, private_key: ImportKey) -> KmsKey:
230231

231232
self.kms_client.create_alias(
232233
TargetKeyId=key.id,
233-
AliasName=f"alias/{alias}",
234+
AliasName=f"alias/ape-aws/v1/{alias}",
234235
KeyUsage="SIGN_VERIFY",
235236
)
236237

0 commit comments

Comments
 (0)