|
|
|
|
@ -21,6 +21,7 @@ import (
|
|
|
|
|
const (
|
|
|
|
|
multiRegionKeyIdPattern = `mrk-[a-f0-9]{32}`
|
|
|
|
|
uuidRegexPattern = `[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[ab89][a-f0-9]{3}-[a-f0-9]{12}`
|
|
|
|
|
aliasRegexPattern = `alias/[a-zA-Z0-9/_-]+`
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func validateKMSKey(path cty.Path, s string) (diags tfdiags.Diagnostics) {
|
|
|
|
|
@ -31,7 +32,7 @@ func validateKMSKey(path cty.Path, s string) (diags tfdiags.Diagnostics) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func validateKMSKeyID(path cty.Path, s string) (diags tfdiags.Diagnostics) {
|
|
|
|
|
keyIdRegex := regexp.MustCompile(`^` + uuidRegexPattern + `|` + multiRegionKeyIdPattern + `$`)
|
|
|
|
|
keyIdRegex := regexp.MustCompile(`^` + uuidRegexPattern + `|` + multiRegionKeyIdPattern + `|` + aliasRegexPattern + `$`)
|
|
|
|
|
if !keyIdRegex.MatchString(s) {
|
|
|
|
|
diags = diags.Append(tfdiags.AttributeValue(
|
|
|
|
|
tfdiags.Error,
|
|
|
|
|
@ -71,7 +72,7 @@ func validateKMSKeyARN(path cty.Path, s string) (diags tfdiags.Diagnostics) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func isKeyARN(arn arn.ARN) bool {
|
|
|
|
|
return keyIdFromARNResource(arn.Resource) != ""
|
|
|
|
|
return keyIdFromARNResource(arn.Resource) != "" || aliasIdFromARNResource(arn.Resource) != ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func keyIdFromARNResource(s string) string {
|
|
|
|
|
@ -84,6 +85,16 @@ func keyIdFromARNResource(s string) string {
|
|
|
|
|
return matches[1]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func aliasIdFromARNResource(s string) string {
|
|
|
|
|
aliasIdResourceRegex := regexp.MustCompile(`^(` + aliasRegexPattern + `)$`)
|
|
|
|
|
matches := aliasIdResourceRegex.FindStringSubmatch(s)
|
|
|
|
|
if matches == nil || len(matches) != 2 {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return matches[1]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type stringValidator func(val string, path cty.Path, diags *tfdiags.Diagnostics)
|
|
|
|
|
|
|
|
|
|
func validateStringNotEmpty(val string, path cty.Path, diags *tfdiags.Diagnostics) {
|
|
|
|
|
|