func()

in cmd/gcp-controller-manager/istiod_csr_approver.go [27:66]


func (a *istiodApprover) handle(csr *capi.CertificateSigningRequest) error {
	if csr.Spec.SignerName != istiodSignerName {
		return nil
	}
	if approved, denied := certificates.GetCertApprovalCondition(&csr.Status); approved || denied {
		return nil
	}

	if !hasExactUsages(csr, []capi.KeyUsage{
		capi.UsageKeyEncipherment,
		capi.UsageDigitalSignature,
		capi.UsageServerAuth,
	}) {
		return a.deny(csr, "disallowed usages requested")
	}

	x509cr, err := certutil.ParseCSR(csr.Spec.Request)
	if err != nil {
		return a.deny(csr, "unable to parse csr")
	}

	if len(x509cr.URIs) != 0 || len(x509cr.EmailAddresses) != 0 || len(x509cr.IPAddresses) != 0 {
		return a.deny(csr, "disallowed sans requested")
	}

	if x509cr.Subject.CommonName != "" && x509cr.Subject.CommonName != csr.Spec.Username {
		return a.deny(csr, "bad common name")
	}

	if csr.Spec.Username != "system:serviceaccount:istio-system:istiod" &&
		!strings.HasPrefix(csr.Spec.Username, "system:serviceaccount:istio-system:istiod-") {
		return a.deny(csr, "permission denied")
	}

	if !a.validDomainNames(x509cr.DNSNames) {
		return a.deny(csr, "bad dns name")
	}

	return a.approve(csr)
}