Я использую python лямбда-функцию для добавления тега изображения к изображениям ECR с помощью boto3. Следующий код работает и добавляет нужный тег к указанному изображению. Однако нацеливание на другое изображение с другим тестовым событием удаляет ранее примененный тег из последнего изображения. Я пробовал 3 разных репозитория, а также лямбда-функции кросс-аккаунта и локального аккаунта.
Например, в репозитории «test-repo» есть три тега изображения:
- 1.0 .0.1
- 1.0.0.2
- 1.0.0.3
Я запускаю тестовое событие для 1.0.0.1, и теперь присутствуют следующие теги:
- DELETEON_2020-03-06, 1.0.0.1
- 1.0.0.2
- 1.0.0.3
Когда я запускаю тестовое событие для любого другое изображение, в этом примере 1.0.0.2, вот что происходит:
- 1.0.0.1
- DELETEON_2020-03-06, 1.0.0.2
- 1.0. 0.3
Я ожидаю, что код применит тег к 1.0.0.1, а затем, когда я запускаю его для 1.0.0.2, он просто добавляет тег к этому изображению. Я не понимаю, почему он удаляет ранее примененный тег. Мне нужно иметь возможность применять тег DELETEON ко всем выявленным уязвимым изображениям. Есть ли что-то, чего я не вижу или не понимаю в методах boto3 ECR, самом ECR, или, возможно, это ошибка?
import json
import boto3
import datetime
from datetime import timedelta
def lambda_handler(event, context):
acct = event['account']
date = datetime.date.today()
repo = event['detail']['repository-name']
digest = event['detail']['image-digest']
imagetag = event['detail']['image-tags'][0]
client = boto3.client('ecr')
dayint = datetime.date.today() + datetime.timedelta(days=3)
deletetag = dayint.strftime("%Y-%m-%d")
response = client.batch_get_image(
registryId=acct,
repositoryName=repo,
imageIds=[
{
'imageDigest': digest,
'imageTag': imagetag
}
]
)
putresponse = client.put_image(
registryId=acct,
repositoryName=repo,
imageManifest=response['images'][0]['imageManifest'],
imageTag='DELETEON_' + deletetag
)
Вот пример тестового события (я отключаю дайджест изображения и тег изображения для нацеливания на разные изображения в одном репо):
{
"version": "0",
"id": "1111111111-22222222222-3333333333333",
"detail-type": "ECR Image Scan",
"source": "aws.ecr",
"account": "111111111111",
"time": "2020-02-14T22:41:19Z",
"region": "us-east-1",
"resources": [
"arn:aws:ecr:us-east-1:111111111111:repository/test-repo"
],
"detail": {
"scan-status": "COMPLETE",
"repository-name": "test-repo",
"image-digest": "sha256:111111111111111111111111111111111111111111111111111",
"image-tags": [
"1.0.0.1"
],
"finding-severity-counts": {
"HIGH": 12,
"MEDIUM": 46,
"INFORMATIONAL": 84,
"LOW": 72,
"UNDEFINED": 6
}
}
}