Standardmäßig patcht Container Security automatisch ECS Fargate-Aufgabendefinitionen
zur Laufzeit mithilfe einer Lambda Function. Das automatische Patchen kann deaktiviert
werden, um eine manuelle Konfiguration der Aufgabendefinitionen mit den erforderlichen
Sicherheitscontainern und Einstellungen zu ermöglichen.
Voraussetzungen
-
Ein Amazon ECS Fargate-Cluster, der mit TrendAI Vision One™ verbunden ist.
-
Laufzeitsicherheit für den ECS-Cluster in der TrendAI Vision One™-Konsole aktiviert.
-
IAM-Berechtigungen zum Erstellen und Ändern von ECS-Aufgabendefinitionen und IAM-Rollen.
-
Eine ECS-Aufgaben-Ausführungsrolle mit Berechtigungen zum Abrufen von Container-Images und zum Schreiben in CloudWatch Logs.
HinweisWenn die Ausführungsrolle nicht über die Berechtigung
logs:CreateLogGroup verfügt, erstellen Sie die CloudWatch-Loggruppe vorab, bevor Sie die Aufgabenbeschreibung
bereitstellen (wie im Terraform-Beispiel in Schritt 3 gezeigt). |
Schritt 1: Deaktivieren Sie die automatische Patch-Verarbeitung
Für bestehende Bereitstellungen
Aktualisieren Sie in der AWS Lambda-Konsole die Umgebungsvariable
DISABLE mit dem Wert true für die Funktion trendmicro-container-security-ecs-taskdef-patcher, um das automatische Patchen von Task-Definitionen zu verhindern.Für neue AWS-Kontobereitstellungen
Bevor Sie den Container Security-Stack von der TrendAI Vision One™-Konsole bereitstellen, ändern Sie die CloudFormation-Vorlage, um den Standardwert
des Parameters
EnableAutomatedFargatePatching auf false zu setzen, und stellen Sie dann den Stack mit der geänderten Vorlage bereit.Schritt 2: Aktuelle Container-Image-Versionen abrufen
Container-Image-Versionen sollten mit der in der Container Security-Bereitstellungsvorlage
angegebenen Version übereinstimmen. Die neueste CloudFormation-Vorlage kann von der
TrendAI Vision One™-Konsole heruntergeladen werden. Die entsprechende Version kann auch aus der bereitgestellten
Vorlage abgerufen werden.
Suchen Sie im Template nach den folgenden Standardwerten:
-
CloudPdigVersion -
CloudScoutVersion -
CloudFalcoVersion
Schritt 3: Aufgabenbeschreibung erstellen oder aktualisieren
Der manuelle Patch-Prozess erfordert mehrere spezifische Konfigurationen, um sicherzustellen,
dass Container Security korrekt funktioniert. Das folgende Terraform-Beispiel enthält
alle erforderlichen Einstellungen.
Konfigurationsanforderungen
Die folgenden Konfigurationen werden benötigt:
-
PID-Modus (Aufgabe): Ermöglicht Sicherheitscontainern, Anwendungsprozesse über die gesamte Aufgabe hinweg zu überwachen.
-
Gemeinsames Volume (trendmicro-Komponente): Ermöglicht Init-Containern, Binärdateien zu kopieren, die der Runtime-Sicherheitscontainer ausführt.
-
SYS_PTRACE-Fähigkeit: Erforderlich für sowohl Anwendungs- als auch Sicherheitscontainer, um Prozessverfolgung und Sicherheitsüberwachung zu ermöglichen.
-
Container-Abhängigkeiten: Stellt sicher, dass Sicherheitscontainer vor der Anwendung und in der richtigen Reihenfolge starten.
-
Gesundheitsprüfungen: Bestätigt, dass Sicherheitskomponenten laufen, bevor die Aufgabe als nicht infiziert markiert wird.
-
IAM-Berechtigungen: Ermöglicht Sicherheitscontainern, Authentifizierungstoken aus AWS Secrets Manager und SSM Parameter Store abzurufen und Sicherheitsereignisse zu melden.
TrendAI Vision One™ Endpunktkonfiguration
Ersetzen Sie den Wert
<VISION_ONE_ENDPOINT> im Terraform-Code, damit er mit der Region von TrendAI Vision One™ übereinstimmt:|
Region
|
Endpunkt-URL
|
|
Amerikas
|
https://api.xdr.trendmicro.com/external/v2/direct/vcs/external/vcs
|
|
Europa
|
https://api.eu.xdr.trendmicro.com/external/v2/direct/vcs/external/vcs
|
|
Japan
|
https://api.xdr.trendmicro.co.jp/external/v2/direct/vcs/external/vcs
|
|
Australien
|
https://api.au.xdr.trendmicro.com/external/v2/direct/vcs/external/vcs
|
|
Indien
|
https://api.in.xdr.trendmicro.com/external/v2/direct/vcs/external/vcs
|
|
Singapur
|
https://api.sg.xdr.trendmicro.com/external/v2/direct/vcs/external/vcs
|
|
Naher Osten und Afrika
|
https://api.mea.xdr.trendmicro.com/external/v2/direct/vcs/external/vcs
|
Terraform-Beispiel
# Data sources to get current AWS region and account ID
data "aws_region" "current" {}
data "aws_caller_identity" "current" {}
# Variables
variable "log_group" {
description = "CloudWatch log group name for ECS containers"
type = string
default = "/ecs/your-task-definition-family-name"
}
variable "cluster_name" {
description = "Name of your existing ECS cluster"
type = string
default = "your-cluster-name"
}
variable "execution_role_arn" {
description = "ARN of the existing ECS task execution role"
type = string
}
# Pre-create CloudWatch log group
resource "aws_cloudwatch_log_group" "ecs_logs" {
name = var.log_group
retention_in_days = 7
tags = {
Name = "ECS Task Logs"
ManagedBy = "Terraform"
Application = "Vision One Container Security"
}
}
resource "aws_ecs_task_definition" "this" {
family = "your-task-definition-family-name"
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
cpu = "512"
memory = "1024"
# Task role - for runtime permissions (SSM, Secrets Manager, ECS TagResource)
task_role_arn = aws_iam_role.container_security_role.arn
# Execution role - for pulling images and writing logs
execution_role_arn = var.execution_role_arn
# Required for Vision One Container Security
pid_mode = "task"
volume { name = "trendmicro-component" }
container_definitions = jsonencode([
# Your application container
{
name = "your-app"
image = "your-app-image:tag"
essential = true
# Application must depend on security container and have SYS_PTRACE capability
dependsOn = [{ condition = "START", containerName = "trendmicro-security" }]
linuxParameters = { capabilities = { add = ["SYS_PTRACE"] } }
logConfiguration = {
logDriver = "awslogs",
options = {
"awslogs-group" = var.log_group,
"awslogs-create-group" = "true",
"awslogs-region" = data.aws_region.current.id,
"awslogs-stream-prefix" = "ecs"
}
}
},
# Vision One Container Security: Init container for PDIG
{
name = "trendmicro-init-pdig"
image = "public.ecr.aws/trendmicro/container-security/cloud-pdig:<CloudPdigVersion>"
essential = false
user = "0" # Required for FIPS images - runs as root to write to shared volume
entryPoint = ["/bin/sh"]
command = ["-c", "set -e; attempt=0; until [ $attempt -ge 3 ]; do attempt=$((attempt+1)); if timeout 30 sh -c 'cp -fv /usr/bin/pdig /var/TrendMicro/ && cp -fv /*.sh /var/TrendMicro/'; then exit 0; fi; sleep 2; done; exit 1"]
mountPoints = [{ sourceVolume = "trendmicro-component", containerPath = "/var/TrendMicro/" }]
logConfiguration = {
logDriver = "awslogs",
options = {
"awslogs-group" = var.log_group,
"awslogs-create-group" = "true",
"awslogs-region" = data.aws_region.current.id,
"awslogs-stream-prefix" = "ecs"
}
}
},
# Vision One Container Security: Init container for Scout
{
name = "trendmicro-init-scout"
image = "public.ecr.aws/trendmicro/container-security/cloud-scout:<CloudScoutVersion>"
essential = false
user = "0" # Required for FIPS images - runs as root to write to shared volume
entryPoint = ["/bin/sh"]
command = ["-c", "set -e; attempt=0; until [ $attempt -ge 3 ]; do attempt=$((attempt+1)); if timeout 30 sh -c 'cp -fv /*.sh /var/TrendMicro/ && cp -fv /service /var/TrendMicro/ && cp -fv /ecs_entry /var/TrendMicro/ && cp -fv /MQTT_config.yaml /var/TrendMicro/ && chmod -v 755 /var/TrendMicro/*.sh'; then exit 0; fi; sleep 2; done; exit 1"]
mountPoints = [{ sourceVolume = "trendmicro-component", containerPath = "/var/TrendMicro/" }]
dependsOn = [{ condition = "SUCCESS", containerName = "trendmicro-init-pdig" }]
logConfiguration = {
logDriver = "awslogs",
options = {
"awslogs-group" = var.log_group,
"awslogs-create-group" = "true",
"awslogs-region" = data.aws_region.current.id,
"awslogs-stream-prefix" = "ecs"
}
}
},
# Vision One Container Security: Runtime security container
{
name = "trendmicro-security"
image = "public.ecr.aws/trendmicro/container-security/cloud-falco:<CloudFalcoVersion>"
essential = false
user = "0" # Required - runs as root for PDIG and Falco operations
entryPoint = ["/bin/sh"]
command = ["-c", "cp -f /var/TrendMicro/* / && /start_ecs_fargate.sh"]
# Environment variables - adjust VISION_ONE_ENDPOINT for your region
environment = [
{ name = "PARAMETER_PREFIX", value = "/V1CS" },
{ name = "SPC_MODE", value = "false" },
{ name = "FILE_INTEGRITY_MONITORING", value = "true" },
{ name = "VISION_ONE_ENDPOINT", value = "<VISION_ONE_ENDPOINT>" },
{ name = "LOG_LEVEL", value = "info" }
]
dependsOn = [
{ condition = "SUCCESS", containerName = "trendmicro-init-pdig" },
{ condition = "SUCCESS", containerName = "trendmicro-init-scout" }
]
mountPoints = [{ sourceVolume = "trendmicro-component", containerPath = "/var/TrendMicro/", readOnly = true }]
linuxParameters = { capabilities = { add = ["SYS_PTRACE"] } }
# Health check ensures security components are running properly
healthCheck = {
command = ["CMD-SHELL", "pgrep -f falco >/dev/null && pgrep -f '/service.*grpc-socket-path' >/dev/null || exit 1"]
interval = 30
timeout = 5
retries = 3
startPeriod = 60
}
logConfiguration = {
logDriver = "awslogs",
options = {
"awslogs-group" = var.log_group,
"awslogs-create-group" = "true",
"awslogs-region" = data.aws_region.current.id,
"awslogs-stream-prefix" = "ecs"
}
}
}
])
}
# IAM role for the task
resource "aws_iam_role" "container_security_role" {
name = "container-security-task-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Action = "sts:AssumeRole",
Effect = "Allow",
Principal = { Service = "ecs-tasks.amazonaws.com" }
}]
})
}
# IAM policy with required permissions for Vision One Container Security
resource "aws_iam_role_policy" "container_security_role_policy" {
name = "container-security-task-role-policy"
role = aws_iam_role.container_security_role.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = "ssm:GetParameter"
Resource = "arn:aws:ssm:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:parameter/V1CS/*"
},
{
Effect = "Allow"
Action = "secretsmanager:GetSecretValue"
Resource = "arn:aws:secretsmanager:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:secret:/V1CS/${var.cluster_name}/AuthToken-*"
},
{
Effect = "Allow"
Action = "ecs:TagResource"
Resource = "arn:aws:ecs:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:task/*"
},
{
Effect = "Allow"
Action = "sqs:SendMessage",
Resource = "arn:aws:sqs:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:trendmicro-container-security-*"
}
]
})
}
Schritt 4: Bereitstellen und überprüfen
-
Wenden Sie die Terraform-Konfiguration an:
terraform plan terraform apply
-
Überprüfen Sie, ob die Aufgabendefinition im AWS ECS-Console korrekt erstellt wurde.
-
Bereitstellen Sie einen Dienst mit dieser Aufgabenbeschreibung.
-
Überprüfen Sie die CloudWatch Logs, um zu bestätigen, dass alle Container erfolgreich gestartet sind.
-
Überprüfen Sie in der TrendAI Vision One™-Konsole, ob die Arbeitslast angezeigt wird und Sicherheitsereignisse erfasst werden.
Wichtige Informationen
Vor der Deinstallation: Wenn Sie planen, Container Security zu deinstallieren, entfernen Sie zuerst die Patches
aus den Aufgabendefinitionen. Dies verhindert mögliche Anwendungsabstürze.
Versionsaktualisierungen: Container-Image-Versionen und Konfigurationseinstellungen können sich zwischen den
Veröffentlichungen ändern. Es wird empfohlen, die neueste CloudFormation-Vorlage für
aktuelle Anforderungen zu überprüfen.
Aktualisierungsprozess: Beim Aktualisieren auf eine neue Version laden Sie die neueste Vorlage herunter,
aktualisieren Sie die Aufgabenbeschreibung mit neuen Bildversionen, testen Sie in
einer Nicht-Produktionsumgebung und stellen Sie dann in der Produktionsumgebung bereit.
