in cmd/conformance/main.go [1495:1538]
func getKeyInfo(ctx context.Context, resourceName string) (*externalKeyInfo, error) {
client, err := kms.NewKeyManagementClient(ctx)
if err != nil {
return nil, fmt.Errorf("error creating Cloud KMS client: %v", err)
}
defer client.Close()
cryptoKey, err := client.GetCryptoKey(ctx, &spb.GetCryptoKeyRequest{Name: resourceName})
if err != nil {
return nil, fmt.Errorf("error getting CryptoKey for %v: %v", resourceName, err)
}
cryptoKeyVer := cryptoKey.GetPrimary()
if cryptoKeyVer.GetState() != rpb.CryptoKeyVersion_ENABLED {
return nil, fmt.Errorf("key %v is not enabled", resourceName)
}
if cryptoKeyVer.ProtectionLevel == rpb.ProtectionLevel_EXTERNAL {
if cryptoKeyVer.ExternalProtectionLevelOptions == nil {
return nil, fmt.Errorf("key %vs does not have external protection level options", resourceName)
}
return &externalKeyInfo{
uri: cryptoKeyVer.GetExternalProtectionLevelOptions().GetExternalKeyUri(),
}, nil
} else if cryptoKeyVer.ProtectionLevel == rpb.ProtectionLevel_EXTERNAL_VPC {
// Create an EKM Client to retrieve EkmConnection.
cloudEKMClient, err := kms.NewEkmClient(ctx)
if err != nil {
return nil, fmt.Errorf("error creating KMS EKM Client: %w", err)
}
defer cloudEKMClient.Close()
uri, certs, err := vpc.GetURIAndCerts(ctx, cloudEKMClient, cryptoKey)
if err != nil {
return nil, fmt.Errorf("error getting EXTERNAL_VPC uri and certs: %v", err)
}
return &externalKeyInfo{uri, certs}, nil
}
return nil, fmt.Errorf("key %v does not have EXTERNAL or EXTERNAL_VPC protection level", resourceName)
}