cmd/genbuilderkey: migrate secrets to secret manager

This change retrieves the master builder key from secret manager. It
is part of the project to store all secrets in a single location.

Updates golang/go#37171

Change-Id: I0c8b8fe8a3db5b9583008bfc105391eca69fba78
Reviewed-on: https://go-review.googlesource.com/c/build/+/222958
Run-TryBot: Carlos Amedee <carlos@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
diff --git a/cmd/genbuilderkey/genbuilderkey.go b/cmd/genbuilderkey/genbuilderkey.go
index 751d90e..7751beb 100644
--- a/cmd/genbuilderkey/genbuilderkey.go
+++ b/cmd/genbuilderkey/genbuilderkey.go
@@ -8,6 +8,7 @@
 
 import (
 	"bytes"
+	"context"
 	"crypto/hmac"
 	"crypto/md5"
 	"flag"
@@ -18,8 +19,9 @@
 	"os"
 	"path/filepath"
 	"strings"
+	"time"
 
-	"cloud.google.com/go/compute/metadata"
+	"golang.org/x/build/internal/secret"
 )
 
 func main() {
@@ -37,7 +39,7 @@
 }
 
 func getMasterKey() []byte {
-	v, err := metadata.ProjectAttributeValue("builder-master-key")
+	v, err := getMasterKeyFromSecretManager()
 	if err == nil {
 		return []byte(strings.TrimSpace(v))
 	}
@@ -48,3 +50,18 @@
 	log.Fatalf("no builder master key found")
 	panic("not reachable")
 }
+
+// getMasterKeyFromSecretManager retrieves the master key from the secret
+// manager service.
+func getMasterKeyFromSecretManager() (string, error) {
+	sc, err := secret.NewClient()
+	if err != nil {
+		return "", err
+	}
+	defer sc.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+	defer cancel()
+
+	return sc.Retrieve(ctx, secret.NameBuilderMasterKey)
+}