我想限制重新标记,AWS ECR 中的最新标签除外。如果一些开发者推送带有相同标签的图像进行调试是非常困难的。所以我想只允许重新标记“最新”标签。但不适用于相同标签名称的不同 docker 映像版本。怎么做?
谢谢-prakash
我想限制重新标记,AWS ECR 中的最新标签除外。如果一些开发者推送带有相同标签的图像进行调试是非常困难的。所以我想只允许重新标记“最新”标签。但不适用于相同标签名称的不同 docker 映像版本。怎么做?
谢谢-prakash
这在今天的 ECR 中是不可能的。您可以为标签启用不可变性(其中包括“最新”是不可变的),或者您必须允许所有标签都是可变的。没有其他选择。但是,在 ECR 路线图上有一个要求。
您今天可能获得所需的唯一方法是在通过 EventBridge响应 ECR 事件向 ECR 进行推送时,事后强制执行此方案。例如,您可以将 lambda 函数订阅到 ECR 推送事件。原则上,该 lambda 可以跟踪图像标签并撤消对除最新标签之外的任何现有标签的标签推送,并可能删除有问题的推送图像(如果删除标签后它会变得未加标签)。
这种 lambda 的伪代码可能是:
def on_event(event, context):
tag = event['detail']['image-tag']
repository = event['detail']['repository-name']
digest = event['detail']['image-digest']
existing_tags = get_existing_tags(repository)
# check if a tag has been overwritten by this push event
if tag != 'latest' and tag in existing_tags:
# revert the change using our existing records
previous_image_digest_for_tag = existing_tags[tag].digest
tag_image(previous_image_digest_for_tag, tag)
remove_if_untagged(repository, digest) # optional
else: # the tag is new or 'latest'
# just record this for future enforcement
update_existing_tags(repository, tag, digest)
return