Skip to content

Commit

Permalink
Add Rego validation for Dockerfiles with policies stored in OCI regis…
Browse files Browse the repository at this point in the history
…tries

Signed-off-by: Santosh <[email protected]>
  • Loading branch information
santoshkal committed Jun 18, 2024
1 parent b703982 commit 1553052
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 30 deletions.
38 changes: 23 additions & 15 deletions cmd/regoval_dockerfileval.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package cmd

import (
"fmt"
"os"
"strings"

"github.com/intelops/genval/pkg/oci"
"github.com/intelops/genval/pkg/utils"
Expand Down Expand Up @@ -74,23 +74,31 @@ func runDockerfilevalCmd(cmd *cobra.Command, args []string) error {
log.Errorf("Error reading Dockerfile: %v, validation failed: %s\n", input, err)
}

if policy == "" {
fmt.Println("\n" + "Validating with default policies...")
if policy == "" || strings.HasPrefix(policy, "oci://") {

tempDir, err := os.MkdirTemp("", "policyDirectory")
tempDir, cleanup, err := utils.TempDirWithCleanup()
if err != nil {
return fmt.Errorf("error creating policy directory: %v", err)
return fmt.Errorf("error creating temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)

policyLoc, err := oci.FetchPolicyFromRegistry(cmd.Name())
if err != nil {
return fmt.Errorf("error fetching policy from registry: %v", err)
}

defaultRegoPolicies, err := validate.ApplyDefaultPolicies(policyLoc, tempDir)
if err != nil {
return fmt.Errorf("error applying default policies: %v", err)
defer cleanup()

var defaultRegoPolicies string
if policy == "" {
fmt.Println("\n" + "Validating with default policies...")
policyLoc, err := oci.FetchPolicyFromRegistry(cmd.Name())
if err != nil {
return fmt.Errorf("error fetching policy from registry: %v", err)
}

defaultRegoPolicies, err = validate.ApplyDefaultPolicies(policyLoc, tempDir)
if err != nil {
return fmt.Errorf("error applying default policies: %v", err)
}
} else {
defaultRegoPolicies, err = validate.ApplyDefaultPolicies(policy, tempDir)
if err != nil {
return fmt.Errorf("error applying default policies: %v", err)
}
}

err = validate.ValidateDockerfile(string(dockerfilefileContent), defaultRegoPolicies)
Expand Down
1 change: 1 addition & 0 deletions pkg/oci/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const (

URLPrefix = "oci://"

// OCI URLs for Rego policies
DockerfilePolicies = URLPrefix + "ghcr.io/intelops/policyhub/genval/dockerfile-policies:v0.0.1"
InfrafilePolicies = URLPrefix + "ghcr.io/intelops/policyhub/genval/infrafile_policies:v0.0.1"
TerraformPOlicies = URLPrefix + "ghcr.io/intelops/policyhub/genval/terraform-policies:v0.0.1"
Expand Down
18 changes: 3 additions & 15 deletions pkg/oci/ociClient.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,25 +296,13 @@ func GenerateCraneOptions() ([]crane.Option, error) {
if user == "" || pass == "" {
return nil, errors.New("username or password is empty")
}
token, tokenSet := os.LookupEnv("ARTIFACT_REGISTRY_TOKEN")

if tokenSet || token != "" {
// Token is set, use it
authConfig := authn.AuthConfig{RegistryToken: token}
opts = append(opts, crane.WithAuth(authn.FromConfig(authConfig)))
} else {
if user == "" || pass == "" {
return nil, errors.New("username or password is empty")
}

// Create authentication config
authConfig := authn.AuthConfig{Username: user, Password: pass}
opts = append(opts, crane.WithAuth(authn.FromConfig(authConfig)))
}
// Create authentication config
authConfig := authn.AuthConfig{Username: user, Password: pass}
opts = append(opts, crane.WithAuth(authn.FromConfig(authConfig)))
}
// Create authentication config
authConfig := authn.AuthConfig{Username: user, Password: pass}
opts = append(opts, crane.WithAuth(authn.FromConfig(authConfig)))
} else {
// Other error occurred while checking for Docker config file
return nil, fmt.Errorf("error checking Docker config at %s: %v", credPath, err)
Expand Down

0 comments on commit 1553052

Please sign in to comment.