projectdiscovery/nuclei · error

aws s3 bucket details are missing. Please provide %s

Error message

aws s3 bucket details are missing. Please provide %s

What it means

Startup options validation (internal/runner/options.go:193) refuses -update-templates runs that would download templates from S3 when required AWS settings are missing. With AwsBucketName set and UpdateTemplates true (and -aws-template-disable-download absent), validateMissingS3Options collects missing items among AWS_TEMPLATE_BUCKET, AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_REGION — or AWS_PROFILE as an alternative to the key trio — and the error lists exactly those names.

Source

Thrown at internal/runner/options.go:193

	}
	if options.DAST {
		if err := validateDASTOptions(options); err != nil {
			return err
		}
	}

	// Verify if any of the client certificate options were set since it requires all three to work properly
	if options.HasClientCertificates() {
		if generic.EqualsAny("", options.ClientCertFile, options.ClientKeyFile, options.ClientCAFile) {
			return errors.New("if a client certification option is provided, then all three must be provided")
		}
		validateCertificatePaths(options.Logger, options.ClientCertFile, options.ClientKeyFile, options.ClientCAFile)
	}
	// Verify AWS secrets are passed if a S3 template bucket is passed
	if options.AwsBucketName != "" && options.UpdateTemplates && !options.AwsTemplateDisableDownload {
		missing := validateMissingS3Options(options)
		if missing != nil {
			return fmt.Errorf("aws s3 bucket details are missing. Please provide %s", strings.Join(missing, ","))
		}
	}

	// Verify Azure connection configuration is passed if the Azure template bucket is passed
	if options.AzureContainerName != "" && options.UpdateTemplates && !options.AzureTemplateDisableDownload {
		missing := validateMissingAzureOptions(options)
		if missing != nil {
			return fmt.Errorf("azure connection details are missing. Please provide %s", strings.Join(missing, ","))
		}
	}

	// Verify that all GitLab options are provided if the GitLab server or token is provided
	if len(options.GitLabTemplateRepositoryIDs) != 0 && options.UpdateTemplates && !options.GitLabTemplateDisableDownload {
		missing := validateMissingGitLabOptions(options)
		if missing != nil {
			return fmt.Errorf("gitlab server details are missing. Please provide %s", strings.Join(missing, ","))
		}
	}

View on GitHub (pinned to 265b3a3dec)

Solutions

  1. Provide the full key set: AWS access key, secret key, and region (flags or env, as named in the error)
  2. Or supply a configured AWS profile instead of static keys
  3. Or skip S3 downloads entirely with -aws-template-disable-download
  4. Drop -update-templates/-aws-bucket-name if S3 distribution was unintended

Example fix

# before
nuclei -update-templates -aws-bucket-name my-bucket

# after
nuclei -update-templates -aws-bucket-name my-bucket \
  -aws-access-key AKIA... -aws-secret-key ... -aws-region us-east-1
Defensive patterns

Strategy: validation

Validate before calling

func missingS3(o *types.Options) []string {
    var m []string
    if o.AwsBucketName == "" { m = append(m, "AWS_TEMPLATE_BUCKET") }
    if o.AwsProfile == "" {
        if o.AwsAccessKey == "" { m = append(m, "AWS_ACCESS_KEY") }
        if o.AwsSecretKey == "" { m = append(m, "AWS_SECRET_KEY") }
        if o.AwsRegion == "" { m = append(m, "AWS_REGION") }
    }
    return m
}

if options.UpdateTemplates && options.AwsBucketName != "" && !options.AwsTemplateDisableDownload {
    if m := missingS3(options); len(m) > 0 {
        return fmt.Errorf("incomplete AWS config: %v", m)
    }
}

Prevention

When it happens

Trigger: Running `nuclei -update-templates -aws-bucket-name mybucket` without the access key, secret key, and region (or a profile); CI jobs assuming AWS env vars are exported when they are not.

Common situations: Teams distributing internal templates via S3; partial env configuration in CI; intending profile-based auth but omitting the profile flag.

Related errors


AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15). Data as JSON: /api/errors/8a9386184039ec8d. Report an issue: GitHub.