Skip to content

Commit 0b661ad

Browse files
authored
Merge pull request #3 from oreillymedia/CL-522
CL-522 | Add `SignerSigningJob` module to revoke signing jobs
2 parents 1d34a88 + 2fae9cc commit 0b661ad

File tree

3 files changed

+96
-3
lines changed

3 files changed

+96
-3
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/rebuy-de/aws-nuke/v2
33
go 1.19
44

55
require (
6-
github.com/aws/aws-sdk-go v1.44.245
6+
github.com/aws/aws-sdk-go v1.44.251
77
github.com/fatih/color v1.15.0
88
github.com/golang/mock v1.6.0
99
github.com/google/uuid v1.3.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/aws/aws-sdk-go v1.44.245 h1:KtY2s4q31/kn33AdV63R5t77mdxsI7rq3YT7Mgo805M=
2-
github.com/aws/aws-sdk-go v1.44.245/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
1+
github.com/aws/aws-sdk-go v1.44.251 h1:unCIT7a/BkYvJ/43D0Ts/0aRbWDMQM0SUzBtdsKPwCg=
2+
github.com/aws/aws-sdk-go v1.44.251/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
33
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
44
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
55
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

resources/signer.signingjobs.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package resources
2+
3+
import (
4+
"fmt"
5+
"time"
6+
7+
"github.com/aws/aws-sdk-go/aws"
8+
"github.com/aws/aws-sdk-go/aws/session"
9+
"github.com/aws/aws-sdk-go/service/signer"
10+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
11+
)
12+
13+
type SignerSigningJob struct {
14+
svc *signer.Signer
15+
jobId *string
16+
reason string
17+
isRevoked *bool
18+
createdAt time.Time
19+
profileName *string
20+
profileVersion *string
21+
platformId *string
22+
platformDisplayName *string
23+
jobOwner *string
24+
jobInvoker *string
25+
}
26+
27+
func init() {
28+
register("SignerSigningJob", ListSignerSigningJobs)
29+
}
30+
31+
func ListSignerSigningJobs(sess *session.Session) ([]Resource, error) {
32+
svc := signer.New(sess)
33+
resources := []Resource{}
34+
const reason string = "Revoked by AWS Nuke"
35+
36+
listJobsInput := &signer.ListSigningJobsInput{}
37+
38+
err := svc.ListSigningJobsPages(listJobsInput, func(page *signer.ListSigningJobsOutput, lastPage bool) bool {
39+
for _, job := range page.Jobs {
40+
resources = append(resources, &SignerSigningJob{
41+
svc: svc,
42+
jobId: job.JobId,
43+
reason: reason,
44+
isRevoked: job.IsRevoked,
45+
createdAt: *job.CreatedAt,
46+
profileName: job.ProfileName,
47+
profileVersion: job.ProfileVersion,
48+
platformId: job.PlatformId,
49+
platformDisplayName: job.PlatformDisplayName,
50+
jobOwner: job.JobOwner,
51+
jobInvoker: job.JobInvoker,
52+
})
53+
}
54+
return true // continue iterating over pages
55+
})
56+
if err != nil {
57+
return nil, err
58+
}
59+
return resources, nil
60+
}
61+
62+
func (j *SignerSigningJob) Filter() error {
63+
// Consider all non-revoked jobs
64+
if *j.isRevoked {
65+
return fmt.Errorf("job already revoked")
66+
}
67+
return nil
68+
}
69+
70+
func (j *SignerSigningJob) Remove() error {
71+
// Signing jobs are viewable by the ListSigningJobs operation for two years after they are performed [1]
72+
// As a precaution we are updating Signing jobs statuses to revoked. This indicates that the signature is no longer valid.
73+
// [1] https://awscli.amazonaws.com/v2/documentation/api/latest/reference/signer/start-signing-job.html
74+
revokeInput := &signer.RevokeSignatureInput{
75+
JobId: j.jobId,
76+
Reason: aws.String(j.reason),
77+
}
78+
_, err := j.svc.RevokeSignature(revokeInput)
79+
return err
80+
}
81+
82+
func (j *SignerSigningJob) Properties() types.Properties {
83+
properties := types.NewProperties()
84+
properties.Set("JobId", j.jobId)
85+
properties.Set("CreatedAt", j.createdAt.Format(time.RFC3339))
86+
properties.Set("ProfileName", j.profileName)
87+
properties.Set("ProfileVersion", j.profileVersion)
88+
properties.Set("PlatformId", j.platformId)
89+
properties.Set("PlatformDisplayName", j.platformDisplayName)
90+
properties.Set("JobOwner", j.jobOwner)
91+
properties.Set("JobInvoker", j.jobInvoker)
92+
return properties
93+
}

0 commit comments

Comments
 (0)