Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automated cherry pick of #1069: Update ECR Regex to support new dual stack endpoints, modify #1071

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions cmd/ecr-credential-provider/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import (
const ecrPublicRegion string = "us-east-1"
const ecrPublicHost string = "public.ecr.aws"

var ecrPrivateHostPattern = regexp.MustCompile(`^(\d{12})\.dkr\.ecr(\-fips)?\.([a-zA-Z0-9][a-zA-Z0-9-_]*)\.(amazonaws\.com(\.cn)?|sc2s\.sgov\.gov|c2s\.ic\.gov|cloud\.adc-e\.uk|csp\.hci\.ic\.gov)$`)
var ecrPrivateHostPattern = regexp.MustCompile(`^(\d{12})\.dkr[\.\-]ecr(\-fips)?\.([a-zA-Z0-9][a-zA-Z0-9-_]*)\.(amazonaws\.com(?:\.cn)?|on\.(?:aws|amazonwebservices\.com\.cn)|sc2s\.sgov\.gov|c2s\.ic\.gov|cloud\.adc-e\.uk|csp\.hci\.ic\.gov)$`)

// ECR abstracts the calls we make to aws-sdk for testing purposes
type ECR interface {
Expand Down Expand Up @@ -229,8 +229,8 @@ func parseHostFromImageReference(image string) (string, error) {

func parseRegionFromECRPrivateHost(host string) (string, error) {
splitHost := ecrPrivateHostPattern.FindStringSubmatch(host)
if len(splitHost) != 6 {
return "", fmt.Errorf("invalid private ECR host: %s", host)
if len(splitHost) != 5 {
return ""
}
return splitHost[3], nil
}
Expand Down
56 changes: 56 additions & 0 deletions cmd/ecr-credential-provider/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,12 +306,62 @@ func Test_parseRegionFromECRPrivateHost(t *testing.T) {
region string
err error
}{
// us-west-2
{
name: "success",
host: "123456789123.dkr.ecr.us-west-2.amazonaws.com",
region: "us-west-2",
err: nil,
},
// CN region
{
name: "success",
host: "123456789123.dkr.ecr.cn-north-1.amazonaws.com.cn",
region: "cn-north-1",
},
// GovCloud
{
name: "success",
host: "123456789123.dkr.ecr.us-gov-east-1.amazonaws.com",
region: "us-gov-east-1",
},
// ISO
{
name: "success",
host: "123456789123.dkr.ecr.us-iso-east-1.c2s.ic.gov",
region: "us-iso-east-1",
},
// Dual-Stack
{
name: "success",
host: "123456789123.dkr-ecr.us-west-2.on.aws",
region: "us-west-2",
},
// Dual-Stack FIPS
{
name: "success",
host: "123456789123.dkr-ecr-fips.us-west-2.on.aws",
region: "us-west-2",
},
// IPv6 CN
{
name: "success",
host: "123456789123.dkr-ecr.cn-north-1.on.amazonwebservices.com.cn",
region: "cn-north-1",
},
// IPv6 GovCloud
{
name: "success",
host: "123456789123.dkr-ecr.us-gov-east-1.on.aws",
region: "us-gov-east-1",
},
// IPv6 GovCloud FIPS
{
name: "success",
host: "123456789123.dkr-ecr-fips.us-gov-east-1.on.aws",
region: "us-gov-east-1",
},
// Invalid name
{
name: "invalid registry",
host: "foobar",
Expand Down Expand Up @@ -385,6 +435,12 @@ func TestRegistryPatternMatch(t *testing.T) {
{"123456789012.dkr.ecr.us-isof-east-1.csp.hci.ic.gov", true},
// invalid gov endpoint
{"123456789012.dkr.ecr.us-iso-east-1.amazonaws.gov", false},
//IPv6 dual stack endpoint
{"123456789012.dkr-ecr.lala-land-1.on.aws", true},
//IPv6 dual stack endpoint fips
{"123456789012.dkr-ecr-fips.lala-land-1.on.aws", true},
//IPv6 dual stack endpoint .cn
{"123456789012.dkr-ecr.lala-land-1.on.amazonwebservices.com.cn", true},
}
for _, g := range grid {
actual := ecrPrivateHostPattern.MatchString(g.Registry)
Expand Down