Skip to content

Commit d8911bb

Browse files
authored
WMI: Enable Sigstore Integration (#54659)
* Add `tctl` resource mappings for `SigstorePolicy` * Add `SigstorePolicy` permissions to preset editor role
1 parent 7933099 commit d8911bb

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed

gen/preset-roles.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,18 @@
10811081
"update",
10821082
"delete"
10831083
]
1084+
},
1085+
{
1086+
"resources": [
1087+
"sigstore_policy"
1088+
],
1089+
"verbs": [
1090+
"list",
1091+
"create",
1092+
"read",
1093+
"update",
1094+
"delete"
1095+
]
10841096
}
10851097
]
10861098
},

lib/services/presets.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ func NewPresetEditorRole() types.Role {
215215
types.NewRule(types.KindGitServer, RW()),
216216
types.NewRule(types.KindWorkloadIdentityX509Revocation, RW()),
217217
types.NewRule(types.KindHealthCheckConfig, RW()),
218+
types.NewRule(types.KindSigstorePolicy, RW()),
218219
},
219220
},
220221
},

tool/tctl/common/resource_command.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ func (rc *ResourceCommand) Initialize(app *kingpin.Application, _ *tctlcfg.Globa
186186
types.KindGitServer: rc.createGitServer,
187187
types.KindAutoUpdateAgentRollout: rc.createAutoUpdateAgentRollout,
188188
types.KindWorkloadIdentityX509IssuerOverride: rc.createWorkloadIdentityX509IssuerOverride,
189+
types.KindSigstorePolicy: rc.createSigstorePolicy,
189190
types.KindHealthCheckConfig: rc.createHealthCheckConfig,
190191
}
191192
rc.UpdateHandlers = map[ResourceKind]ResourceCreateHandler{
@@ -210,6 +211,7 @@ func (rc *ResourceCommand) Initialize(app *kingpin.Application, _ *tctlcfg.Globa
210211
types.KindGitServer: rc.updateGitServer,
211212
types.KindAutoUpdateAgentRollout: rc.updateAutoUpdateAgentRollout,
212213
types.KindWorkloadIdentityX509IssuerOverride: rc.updateWorkloadIdentityX509IssuerOverride,
214+
types.KindSigstorePolicy: rc.updateSigstorePolicy,
213215
types.KindHealthCheckConfig: rc.updateHealthCheckConfig,
214216
}
215217
rc.config = config
@@ -1226,6 +1228,65 @@ func (rc *ResourceCommand) updateWorkloadIdentityX509IssuerOverride(ctx context.
12261228
return nil
12271229
}
12281230

1231+
func (rc *ResourceCommand) createSigstorePolicy(ctx context.Context, client *authclient.Client, raw services.UnknownResource) error {
1232+
r, err := services.UnmarshalProtoResource[*workloadidentityv1pb.SigstorePolicy](raw.Raw, services.DisallowUnknown())
1233+
if err != nil {
1234+
return trace.Wrap(err)
1235+
}
1236+
1237+
c := client.SigstorePolicyResourceServiceClient()
1238+
if rc.IsForced() {
1239+
if _, err := c.UpsertSigstorePolicy(
1240+
ctx,
1241+
&workloadidentityv1pb.UpsertSigstorePolicyRequest{
1242+
SigstorePolicy: r,
1243+
},
1244+
); err != nil {
1245+
return trace.Wrap(err)
1246+
}
1247+
} else {
1248+
if _, err := c.CreateSigstorePolicy(
1249+
ctx,
1250+
&workloadidentityv1pb.CreateSigstorePolicyRequest{
1251+
SigstorePolicy: r,
1252+
},
1253+
); err != nil {
1254+
return trace.Wrap(err)
1255+
}
1256+
}
1257+
1258+
fmt.Fprintf(
1259+
rc.stdout,
1260+
types.KindSigstorePolicy+" %q has been created\n",
1261+
r.GetMetadata().GetName(),
1262+
)
1263+
return nil
1264+
}
1265+
1266+
func (rc *ResourceCommand) updateSigstorePolicy(ctx context.Context, client *authclient.Client, raw services.UnknownResource) error {
1267+
r, err := services.UnmarshalProtoResource[*workloadidentityv1pb.SigstorePolicy](raw.Raw, services.DisallowUnknown())
1268+
if err != nil {
1269+
return trace.Wrap(err)
1270+
}
1271+
1272+
c := client.SigstorePolicyResourceServiceClient()
1273+
if _, err = c.UpdateSigstorePolicy(
1274+
ctx,
1275+
&workloadidentityv1pb.UpdateSigstorePolicyRequest{
1276+
SigstorePolicy: r,
1277+
},
1278+
); err != nil {
1279+
return trace.Wrap(err)
1280+
}
1281+
1282+
fmt.Fprintf(
1283+
rc.stdout,
1284+
types.KindSigstorePolicy+" %q has been updated\n",
1285+
r.GetMetadata().GetName(),
1286+
)
1287+
return nil
1288+
}
1289+
12291290
func (rc *ResourceCommand) updateCrownJewel(ctx context.Context, client *authclient.Client, resource services.UnknownResource) error {
12301291
in, err := services.UnmarshalCrownJewel(resource.Raw, services.DisallowUnknown())
12311292
if err != nil {
@@ -2158,6 +2219,21 @@ func (rc *ResourceCommand) Delete(ctx context.Context, client *authclient.Client
21582219
types.KindWorkloadIdentityX509IssuerOverride+" %q has been deleted\n",
21592220
rc.ref.Name,
21602221
)
2222+
case types.KindSigstorePolicy:
2223+
c := client.SigstorePolicyResourceServiceClient()
2224+
if _, err := c.DeleteSigstorePolicy(
2225+
ctx,
2226+
&workloadidentityv1pb.DeleteSigstorePolicyRequest{
2227+
Name: rc.ref.Name,
2228+
},
2229+
); err != nil {
2230+
return trace.Wrap(err)
2231+
}
2232+
fmt.Fprintf(
2233+
rc.stdout,
2234+
types.KindSigstorePolicy+" %q has been deleted\n",
2235+
rc.ref.Name,
2236+
)
21612237
case types.KindStaticHostUser:
21622238
if err := client.StaticHostUserClient().DeleteStaticHostUser(ctx, rc.ref.Name); err != nil {
21632239
return trace.Wrap(err)
@@ -3542,6 +3618,42 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client *authclient
35423618
}
35433619
}
35443620
return collection, nil
3621+
case types.KindSigstorePolicy:
3622+
c := client.SigstorePolicyResourceServiceClient()
3623+
if rc.ref.Name != "" {
3624+
r, err := c.GetSigstorePolicy(
3625+
ctx,
3626+
&workloadidentityv1pb.GetSigstorePolicyRequest{
3627+
Name: rc.ref.Name,
3628+
},
3629+
)
3630+
if err != nil {
3631+
return nil, trace.Wrap(err)
3632+
}
3633+
return namedResourceCollection{types.ProtoResource153ToLegacy(r)}, nil
3634+
}
3635+
var collection namedResourceCollection
3636+
var pageToken string
3637+
for {
3638+
resp, err := c.ListSigstorePolicies(
3639+
ctx,
3640+
&workloadidentityv1pb.ListSigstorePoliciesRequest{
3641+
PageToken: pageToken,
3642+
},
3643+
)
3644+
if err != nil {
3645+
return nil, trace.Wrap(err)
3646+
}
3647+
collection = slices.Grow(collection, len(resp.GetSigstorePolicies()))
3648+
for _, r := range resp.GetSigstorePolicies() {
3649+
collection = append(collection, types.ProtoResource153ToLegacy(r))
3650+
}
3651+
pageToken = resp.GetNextPageToken()
3652+
if pageToken == "" {
3653+
break
3654+
}
3655+
}
3656+
return collection, nil
35453657
case types.KindHealthCheckConfig:
35463658
if rc.ref.Name != "" {
35473659
cfg, err := client.GetHealthCheckConfig(ctx, rc.ref.Name)

0 commit comments

Comments
 (0)