ECR image tag not immutable This product is not supported for your selected
Datadog site . (
).
Id: cloudformation-aws-ecr-image-tag-not-immutable
Provider: AWS
Platform: CloudFormation
Severity: Medium
Category: Insecure Configurations
Learn More Description Amazon ECR repositories should enforce immutable image tags to prevent tags from being overwritten. This reduces the risk of supply-chain tampering and accidental or malicious replacement of images referenced by deployments.
The ImageTagMutability property on AWS::ECR::Repository must be defined and set to IMMUTABLE. Resources missing this property or with ImageTagMutability set to MUTABLE will be flagged as a security issue.
Secure configuration example:
MyRepository :
Type : AWS::ECR::Repository
Properties :
RepositoryName : my-repo
ImageTagMutability : IMMUTABLE
Compliant Code Examples Resources :
MyRepository :
Type : AWS::ECR::Repository
Properties :
ImageTagMutability : "IMMUTABLE"
RepositoryName : "test-repository"
RepositoryPolicyText :
Version : "2012-10-17"
Statement :
-
Sid : AllowPushPull
Effect : Allow
Principal :
AWS :
- "arn:aws:iam::123456789012:user/Bob"
- "arn:aws:iam::123456789012:user/Alice"
Action :
- "ecr:GetDownloadUrlForLayer"
- "ecr:BatchGetImage"
- "ecr:BatchCheckLayerAvailability"
- "ecr:PutImage"
- "ecr:InitiateLayerUpload"
- "ecr:UploadLayerPart"
- "ecr:CompleteLayerUpload"
{
"Resources" : {
"MyRepository2" : {
"Type" : "AWS::ECR::Repository" ,
"Properties" : {
"ImageTagMutability" : "IMMUTABLE" ,
"RepositoryName" : "test-repository" ,
"RepositoryPolicyText" : {
"Version" : "2008-10-17" ,
"Statement" : [
{
"Sid" : "AllowPushPull" ,
"Effect" : "Allow" ,
"Principal" : {
"AWS" : [
"arn:aws:iam::123456789012:user/Bob" ,
"arn:aws:iam::123456789012:user/Alice"
]
},
"Action" : [
"ecr:GetDownloadUrlForLayer" ,
"ecr:BatchGetImage" ,
"ecr:BatchCheckLayerAvailability" ,
"ecr:PutImage" ,
"ecr:InitiateLayerUpload" ,
"ecr:UploadLayerPart" ,
"ecr:CompleteLayerUpload"
]
}
]
}
}
}
}
}
Non-Compliant Code Examples Resources :
MyRepository3 :
Type : AWS::ECR::Repository
Properties :
ImageTagMutability : "MUTABLE"
RepositoryName : "test-repository"
RepositoryPolicyText :
Version : "2012-10-17"
Statement :
-
Sid : AllowPushPull
Effect : Allow
Principal :
AWS :
- "arn:aws:iam::123456789012:user/Bob"
- "arn:aws:iam::123456789012:user/Alice"
Action :
- "ecr:GetDownloadUrlForLayer"
- "ecr:BatchGetImage"
- "ecr:BatchCheckLayerAvailability"
- "ecr:PutImage"
- "ecr:InitiateLayerUpload"
- "ecr:UploadLayerPart"
- "ecr:CompleteLayerUpload"
MyRepository4 :
Type : AWS::ECR::Repository
Properties :
RepositoryName : "test-repository"
RepositoryPolicyText :
Version : "2012-10-17"
Statement :
-
Sid : AllowPushPull
Effect : Allow
Principal :
AWS :
- "arn:aws:iam::123456789012:user/Bob"
- "arn:aws:iam::123456789012:user/Alice"
Action :
- "ecr:GetDownloadUrlForLayer"
- "ecr:BatchGetImage"
- "ecr:BatchCheckLayerAvailability"
- "ecr:PutImage"
- "ecr:InitiateLayerUpload"
- "ecr:UploadLayerPart"
- "ecr:CompleteLayerUpload"
{
"Resources" : {
"MyRepository5" : {
"Type" : "AWS::ECR::Repository" ,
"Properties" : {
"ImageTagMutability" : "MUTABLE" ,
"RepositoryName" : "test-repository" ,
"RepositoryPolicyText" : {
"Version" : "2008-10-17" ,
"Statement" : [
{
"Sid" : "AllowPushPull" ,
"Effect" : "Allow" ,
"Principal" : {
"AWS" : [
"arn:aws:iam::123456789012:user/Bob" ,
"arn:aws:iam::123456789012:user/Alice"
]
},
"Action" : [
"ecr:GetDownloadUrlForLayer" ,
"ecr:BatchGetImage" ,
"ecr:BatchCheckLayerAvailability" ,
"ecr:PutImage" ,
"ecr:InitiateLayerUpload" ,
"ecr:UploadLayerPart" ,
"ecr:CompleteLayerUpload"
]
}
]
}
}
},
"MyRepository6" : {
"Type" : "AWS::ECR::Repository" ,
"Properties" : {
"RepositoryName" : "test-repository" ,
"RepositoryPolicyText" : {
"Version" : "2008-10-17" ,
"Statement" : [
{
"Sid" : "AllowPushPull" ,
"Effect" : "Allow" ,
"Principal" : {
"AWS" : [
"arn:aws:iam::123456789012:user/Bob" ,
"arn:aws:iam::123456789012:user/Alice"
]
},
"Action" : [
"ecr:GetDownloadUrlForLayer" ,
"ecr:BatchGetImage" ,
"ecr:BatchCheckLayerAvailability" ,
"ecr:PutImage" ,
"ecr:InitiateLayerUpload" ,
"ecr:UploadLayerPart" ,
"ecr:CompleteLayerUpload"
]
}
]
}
}
}
}
}