amazon-web-services - AWS ECR 如何限制除最新标签之外的重新标记

我想限制重新标记,但 AWS ECR 中的最新标记除外。 如果某些开发人员推送具有相同标签的图像进行调试是非常困难的。 所以我只想允许重新标记“最新”标签。但不适用于具有相同标签名称的不同 docker 镜像版本。 怎么做?

谢谢 -普拉卡什

最佳答案

今天的 ECR 无法做到这一点。您可以 enable immutability for tags (这将包括“最新”是不可变的)或者您必须允许所有标签都是可变的。没有其他选择。但是,有一个 request on the ECR roadmap为此。

您今天可能能够获得想要的东西的唯一方法是在事后通过响应 ECR events via EventBridge 向 ECR 推送时强制执行此方案。 .例如,您可以为 ECR 推送事件订阅 lambda 函数。原则上,该 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

https://stackoverflow.com/questions/56393805/

相关文章:

javascript - 如何让外部库 intellisense 在 vscode for java

ionic-framework - ionic Mapbox GeolocateControl :

python - 函数定义的 Pythonic 顺序是什么?

mysql - 如果我定义一个卷,Docker-compose 将不会启动 MySQL

javascript - 当我在滚动功能上添加动画时,导航栏熄灭

java - 如何在 Reactive Spring WEBFlux(Spring 5) 中读取上传

f# - 如何为 Saturn 应用构建集成测试

angular - @angular-devkit/build-ng-packagr :build

reactjs - 使用 react-testing-library 时让 react-datepi

java - 不再支持嵌入 Flash 的视频