Skip to content

Commit

Permalink
Workload Identity: Add minimally viable implementation of IssueWorklo…
Browse files Browse the repository at this point in the history
…adIdentity RPC (#49943)

* Add MVP implementation of IssueWorkloadIdentity endpoint

* Add experiment flag

* Fix TTL shadowing

* Support some non-string attributes for rules and templatin

* Adjust regex with @timothyb89 's suggestions

* Add note on deny rules
  • Loading branch information
strideynet authored Dec 18, 2024
1 parent 475753f commit 3d6d587
Show file tree
Hide file tree
Showing 6 changed files with 1,299 additions and 0 deletions.
17 changes: 17 additions & 0 deletions lib/auth/grpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -5186,6 +5186,23 @@ func NewGRPCServer(cfg GRPCServerConfig) (*GRPCServer, error) {
}
workloadidentityv1pb.RegisterWorkloadIdentityResourceServiceServer(server, workloadIdentityResourceService)

clusterName, err := cfg.AuthServer.GetClusterName()
if err != nil {
return nil, trace.Wrap(err, "getting cluster name")
}
workloadIdentityIssuanceService, err := workloadidentityv1.NewIssuanceService(&workloadidentityv1.IssuanceServiceConfig{
Authorizer: cfg.Authorizer,
Cache: cfg.AuthServer.Cache,
Emitter: cfg.Emitter,
Clock: cfg.AuthServer.GetClock(),
KeyStore: cfg.AuthServer.keyStore,
ClusterName: clusterName.GetClusterName(),
})
if err != nil {
return nil, trace.Wrap(err, "creating workload identity issuance service")
}
workloadidentityv1pb.RegisterWorkloadIdentityIssuanceServiceServer(server, workloadIdentityIssuanceService)

dbObjectImportRuleService, err := dbobjectimportrulev1.NewDatabaseObjectImportRuleService(dbobjectimportrulev1.DatabaseObjectImportRuleServiceConfig{
Authorizer: cfg.Authorizer,
Backend: cfg.AuthServer.Services,
Expand Down
41 changes: 41 additions & 0 deletions lib/auth/machineid/workloadidentityv1/experiment/experiment.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Teleport
// Copyright (C) 2024 Gravitational, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package experiment

import (
"os"
"sync"
)

var mu sync.Mutex

var experimentEnabled = os.Getenv("TELEPORT_WORKLOAD_IDENTITY_UX_EXPERIMENT") == "1"

// Enabled returns true if the workload identity UX experiment is
// enabled.
func Enabled() bool {
mu.Lock()
defer mu.Unlock()
return experimentEnabled
}

// SetEnabled sets the experiment enabled flag.
func SetEnabled(enabled bool) {
mu.Lock()
defer mu.Unlock()
experimentEnabled = enabled
}
Loading

0 comments on commit 3d6d587

Please sign in to comment.