{"record":{"id":"8a9386184039ec8d","repo":"projectdiscovery/nuclei","slug":"aws-s3-bucket-details-are-missing-please-provide","errorCode":null,"errorMessage":"aws s3 bucket details are missing. Please provide %s","messagePattern":"aws s3 bucket details are missing\\. Please provide (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/runner/options.go","lineNumber":193,"sourceCode":"\t}\n\tif options.DAST {\n\t\tif err := validateDASTOptions(options); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Verify if any of the client certificate options were set since it requires all three to work properly\n\tif options.HasClientCertificates() {\n\t\tif generic.EqualsAny(\"\", options.ClientCertFile, options.ClientKeyFile, options.ClientCAFile) {\n\t\t\treturn errors.New(\"if a client certification option is provided, then all three must be provided\")\n\t\t}\n\t\tvalidateCertificatePaths(options.Logger, options.ClientCertFile, options.ClientKeyFile, options.ClientCAFile)\n\t}\n\t// Verify AWS secrets are passed if a S3 template bucket is passed\n\tif options.AwsBucketName != \"\" && options.UpdateTemplates && !options.AwsTemplateDisableDownload {\n\t\tmissing := validateMissingS3Options(options)\n\t\tif missing != nil {\n\t\t\treturn fmt.Errorf(\"aws s3 bucket details are missing. Please provide %s\", strings.Join(missing, \",\"))\n\t\t}\n\t}\n\n\t// Verify Azure connection configuration is passed if the Azure template bucket is passed\n\tif options.AzureContainerName != \"\" && options.UpdateTemplates && !options.AzureTemplateDisableDownload {\n\t\tmissing := validateMissingAzureOptions(options)\n\t\tif missing != nil {\n\t\t\treturn fmt.Errorf(\"azure connection details are missing. Please provide %s\", strings.Join(missing, \",\"))\n\t\t}\n\t}\n\n\t// Verify that all GitLab options are provided if the GitLab server or token is provided\n\tif len(options.GitLabTemplateRepositoryIDs) != 0 && options.UpdateTemplates && !options.GitLabTemplateDisableDownload {\n\t\tmissing := validateMissingGitLabOptions(options)\n\t\tif missing != nil {\n\t\t\treturn fmt.Errorf(\"gitlab server details are missing. Please provide %s\", strings.Join(missing, \",\"))\n\t\t}\n\t}","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/projectdiscovery/nuclei/blob/265b3a3dec374741614e342f813c10f8b38d2bb7/internal/runner/options.go#L175-L211","documentation":"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.","triggerScenarios":"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.","commonSituations":"Teams distributing internal templates via S3; partial env configuration in CI; intending profile-based auth but omitting the profile flag.","solutions":["Provide the full key set: AWS access key, secret key, and region (flags or env, as named in the error)","Or supply a configured AWS profile instead of static keys","Or skip S3 downloads entirely with -aws-template-disable-download","Drop -update-templates/-aws-bucket-name if S3 distribution was unintended"],"exampleFix":"# before\nnuclei -update-templates -aws-bucket-name my-bucket\n\n# after\nnuclei -update-templates -aws-bucket-name my-bucket \\\n  -aws-access-key AKIA... -aws-secret-key ... -aws-region us-east-1","handlingStrategy":"validation","validationCode":"func missingS3(o *types.Options) []string {\n    var m []string\n    if o.AwsBucketName == \"\" { m = append(m, \"AWS_TEMPLATE_BUCKET\") }\n    if o.AwsProfile == \"\" {\n        if o.AwsAccessKey == \"\" { m = append(m, \"AWS_ACCESS_KEY\") }\n        if o.AwsSecretKey == \"\" { m = append(m, \"AWS_SECRET_KEY\") }\n        if o.AwsRegion == \"\" { m = append(m, \"AWS_REGION\") }\n    }\n    return m\n}\n\nif options.UpdateTemplates && options.AwsBucketName != \"\" && !options.AwsTemplateDisableDownload {\n    if m := missingS3(options); len(m) > 0 {\n        return fmt.Errorf(\"incomplete AWS config: %v\", m)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Export the full AWS set (or a profile) together in CI environments","Add a config pre-flight that mirrors validateMissingS3Options","Use -aws-template-disable-download in jobs that never fetch from S3"],"tags":["go","nuclei","aws-s3","configuration","cli","templates-distribution"],"backgroundTag":null,"analyzedSha":"265b3a3dec374741614e342f813c10f8b38d2bb7","analyzedAt":"2026-08-15T20:05:51.855Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}