Skip to content

doc: creating the spec for inspect command#490

Closed
vaninrao10 wants to merge 0 commit intonotaryproject:mainfrom
vaninrao10:vani-branch-1
Closed

doc: creating the spec for inspect command#490
vaninrao10 wants to merge 0 commit intonotaryproject:mainfrom
vaninrao10:vani-branch-1

Conversation

@vaninrao10
Copy link
Contributor

Signed-off-by: vaninrao10vaninrao@amazon.com
Use Case / Scenarios:

  1. Troubleshooting
    
  2. Auditing
    
  3. If verification of the image digest / signature digest fails due to wrong certificate configuration, user will execute the inspect command to extract the certificate thumb print, a hash of a certificate which is a unique identifier for certificates.
    

@vaninrao10 vaninrao10 added this to the RC-2 milestone Dec 20, 2022
@vaninrao10 vaninrao10 added the documentation Improvements or additions to documentation label Dec 20, 2022
@vaninrao10 vaninrao10 self-assigned this Dec 20, 2022
yizha1
yizha1 previously requested changes Dec 22, 2022
Copy link
Contributor

@yizha1 yizha1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @vaninrao10. My main concern is the human readable form of attributes, the current proposal doesn't seem fit into the tree view.

## Outline

```text
Inspect artifacts and display the details of the signatures for all the listed signatures and its associated certificate properties.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inspect all the signatures associated with the signed artifact.

-p, --password string password for registry operations (default to $NOTATION_PASSWORD if not specified)
--plain-http registry access via plain HTTP
-u, --username string username for registry operations (default to $NOTATION_USERNAME if not specified)
-o, --output on command line sets the output to json
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-o flag should be placed before -p flag.

-o, --output string output format, options: "json"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need -o flag with inspect command? Are we expecting inspect command to be invoked programmatically ? If so we will also need to define output format for json output.

Flags:
-h, --help for describing the signature
-p, --password string password for registry operations (default to $NOTATION_PASSWORD if not specified)
--plain-http registry access via plain HTTP
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The indentation is not correct. Should be aligned with --password.

Usage:
notation inspect [flags] <reference>

Aliases:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can remove Aliases if no alias is available.

└── application/vnd.cncf.notary.signature
├── sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
├──"Protected Attributes":
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The indentation doesn't look right. The attributes were displayed in json format, however the whole tree view is in human readable form. It's a mix of two types of formats. We may need a new human readable form for attributes.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say instead of json use the indentation/format we are using for other commands

@yizha1
Copy link
Contributor

yizha1 commented Dec 24, 2022

Besides protected header, unprotected header and cert properties, we could also consider inspecting the payload property according to the signature spec

It is used to compare the signed payload against the descriptor of the remote artifact for troubleshooting purpose.

@vaninrao10 @iamsamirzon @priteshbandi @toddysm

-p, --password string password for registry operations (default to $NOTATION_PASSWORD if not specified)
--plain-http registry access via plain HTTP
-u, --username string username for registry operations (default to $NOTATION_USERNAME if not specified)
-o, --output on command line sets the output to json
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need -o flag with inspect command? Are we expecting inspect command to be invoked programmatically ? If so we will also need to define output format for json output.

└── application/vnd.cncf.notary.signature
├── sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
├──"Protected Attributes":
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say instead of json use the indentation/format we are using for other commands

├──<digest_of_signature_manifest>
├──<Protected Attributes...>
├──<UnProtected Attributes...>
├──<Cert Properties...>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would just call it certificates

Suggested change
├──<Cert Properties...>
├──<certificates>

@codecov-commenter
Copy link

codecov-commenter commented Dec 28, 2022

Codecov Report

Merging #490 (c5f63f0) into main (f83a48b) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #490   +/-   ##
=======================================
  Coverage   29.57%   29.57%           
=======================================
  Files          26       26           
  Lines        1515     1515           
=======================================
  Hits          448      448           
  Misses       1050     1050           
  Partials       17       17           

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

Comment on lines 22 to 25
├──<signed attributes>
├──<unsigned attributes>
├──<certificates>
├──<payload>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation is off

├──<user-defined attributes>
├──<unsigned Attributes>
├──<certificates>
├──<payload>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
──<payload>
──<payload>

Similar changes for other outputs

@priteshbandi
Copy link
Contributor

DCO check if failing

@vaninrao10 vaninrao10 force-pushed the vani-branch-1 branch 2 times, most recently from 3e9fa2d to 59aa23d Compare December 29, 2022 00:10
@vaninrao10
Copy link
Contributor Author

Thanks @vaninrao10. My main concern is the human readable form of attributes, the current proposal doesn't seem fit into the tree view.

Thanks @vaninrao10. My main concern is the human readable form of attributes, the current proposal doesn't seem fit into the tree view.

Took care of it.

@vaninrao10 vaninrao10 dismissed yizha1’s stale review December 29, 2022 00:13

This has been taken care in the inspect spec for the human readable format in the output examples.

@iamsamirzon
Copy link
Contributor

LGTM

@iamsamirzon
Copy link
Contributor

LGTM


Use `notation inspect` command to inspect or describe all the signatures associated to a signed artifact (image) in a human readable format.

Upon successful execution,the digest of the signed artifact and details of all the signatures associated with artifact and its respective certificate properties are displayed as following:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and its respective to "their respective certificate"

localhost:5000/net-monitor@sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
└── application/vnd.cncf.notary.signature
├── sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
├──"Protected Attributes":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I recollect, the idea was to include even the image digest, signature artifact type, digest of signature and protected attribute inside the JSON formatting.

{
"SHA1 Thumbprint":"2f1cc5b8455381cdefac83b4bd305b789cc9c16e"
}
└── sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above. As I recollect one of the feedback item was to enclose everything inside JSON formatting

}
"Certificate Properties":
{
"SHA1 Thumbprint":"2f1rr5b8455381frdajc83b4bd305b743cc9513u"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest use a different name like "Certificate Thumbprint 1", "Certificate Thumbprint 2".

├──expiry: 2022-10-06T07:01:20Z
├──verification plugin: com.example.nv2plugin //extended attributes used by Notary v2 to support plugins
├──user-defined attributes:
├──io.wabbit-networks.buildId: 123 //Notary v2 payload annotations is shown here has user defined metadata.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
├──io.wabbit-networks.buildId: 123 //Notary v2 payload annotations is shown here has user defined metadata.
├──io.wabbit-networks.buildId: 123 //user-defined payload annotations

├──<digest_of_signature_manifest>
├──<signed attributes>
├──<user-defined attributes>
├──<unsigned Attributes>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
├──<unsigned Attributes>
├──<unsigned attributes>

Copy link
Member

@FeynmanZhou FeynmanZhou left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vaninrao10 Please see my comments above. Thanks!

Copy link
Contributor

@yizha1 yizha1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @vaninrao10, the latest version looks much better. Exciting. New comments were provided.

@vaninrao10 vaninrao10 force-pushed the vani-branch-1 branch 2 times, most recently from 2aeb76f to ae544e4 Compare January 3, 2023 21:22
@shizhMSFT shizhMSFT changed the title Creating the spec for inspect command doc: creating the spec for inspect command Jan 4, 2023
Comment on lines 11 to 24
<registry>/<repository>@<digest>
└──application/vnd.cncf.notary.signature
├──<digest_of_signature_manifest>
├──<signing algorithm>
├──<signed attributes>
├──<user-defined attributes>
├──<unsigned attributes>
├──<certificates>
└──<payload>
├──<digest_of_signature_manifest>
├──<signing algorithm>
├──<signed attributes>
├──<unsigned attributes>
├──<certificates>
└──<payload>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<registry>/<repository>@<digest>
└──application/vnd.cncf.notary.signature
├──<digest_of_signature_manifest>
├──<signing algorithm>
├──<signed attributes>
├──<user-defined attributes>
├──<unsigned attributes>
├──<certificates>
└──<payload>
├──<digest_of_signature_manifest>
├──<signing algorithm>
├──<signed attributes>
├──<unsigned attributes>
├──<certificates>
└──<payload>
<registry>/<repository>@<digest>
└── application/vnd.cncf.notary.signature
├── <digest_of_signature_manifest>
├── <signing algorithm>
├── <signed attributes>
├── <user-defined attributes>
├── <unsigned attributes>
├── <certificates>
└── <payload>
└── <digest_of_signature_manifest>
├── <signing algorithm>
├── <signed attributes>
├── <unsigned attributes>
├── <certificates>
└── <payload>

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar format should be applied to the examples.

Comment on lines 77 to 80
├──certificates:
├──SHA1 fingerprint: 2f1cc5b8455381cdefac83b4bd305b789cc9c16e
├──Issued to: Microsoft Root Certificate Authority 2010
├──Issued by: Microsoft Root Certificate Authority 2010
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this sub tree print a cert chain instead of a single cert?

Comment on lines 78 to 80
├──SHA1 fingerprint: 2f1cc5b8455381cdefac83b4bd305b789cc9c16e
├──Issued to: Microsoft Root Certificate Authority 2010
├──Issued by: Microsoft Root Certificate Authority 2010
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid time range is also an important field.

├──SHA1 fingerprint: 2f1cc5b8455381cdefac83b4bd305b789cc9c16e
├──Issued to: Microsoft Root Certificate Authority 2010
├──Issued by: Microsoft Root Certificate Authority 2010
├──payload: //descriptor of the target artifact manifest that is signed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of payload, should it be called subject or target artifact?

"signingScheme": "notary.default.x509",
"signingTime": "2022-04-06T07:01:20Z",
"expiry": "2022-10-06T07:01:20Z",
"verification plugin": "com.example.nv2plugin"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should it be verificationPlugin?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

field names should be consistent across the json view.

Copy link
Contributor

@yizha1 yizha1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@priteshbandi @vaninrao10 @FeynmanZhou @shizhMSFT I don't see any big issues for this PR, just the flag name whether it is called -o, --output, since we also plan to introduce this kind of flag to other CLI commands, it's better we can decide now. See comments #490 (comment)


Flags:
-h, --help for describing the signature
-o, --output on command line sets the output to json
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we need to add this kind of output flag for other notation cli commands, and it is on the user interface, it's better we can align what is the best solution for our users. Here are 3 options so far:

  1. -o, --output json
  2. `--display {tree, json) by default tree
  3. --json (an example in https://clig.dev/#output)

Any other options, Let's vote?

@yizha1
Copy link
Contributor

yizha1 commented Jan 5, 2023

@vaninrao10 please fix the DCO issues.

Copy link
Contributor

@shizhMSFT shizhMSFT left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The DCO check is failing. Could you sign off all the commits?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

7 participants

Comments