[Draft] Trust Policy and Trust Store Configuration #100
Closed
sudo-bmitch
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Out of scope
Requirements
Trust Store Requirements
Deployers who consumes and executes the signed artifact from a registry needs a mechanism to specify the trusted producers. This is where deployer will use Trust Store.
Trust Policy Requirements
Deployers who consumes and executes the signed artifact from a registry needs a mechanism to specify how the artifacts should be evaluated for trust. This is where deployer will use Trust Policy.
Design
Trust Store
{ "trustStore": { "wabbit-networks.io": { "identities": { "x5c": [ "-----BEGIN CERTIFICATE-----rootCertificate1-----END CERTIFICATE-----", "-----BEGIN CERTIFICATE-----rootCertificate2----END CERTIFICATE-----" ], "tsaX5c": [ "-----BEGIN CERTIFICATE-----rootCertificate11-----END CERTIFICATE-----", "-----BEGIN CERTIFICATE-----rootCertificate22-----END CERTIFICATE-----" ], "key": [ "exampleKey2", "exampleKey4" ], "keyId": [ "exampleKeyId2", "exampleKeyId4" ] }, }, "dev.wabbit-networks.io": { "identities": { "x5c": [ "-----BEGIN CERTIFICATE-----rootCertificate3-----END CERTIFICATE-----", ], "key": [ "exampleKey1", "exampleKey3" ], "keyId": [ "exampleKeyId1", "exampleKeyId3" ] }, }, "docker.io": { "identities": { "x5c": [ "-----BEGIN CERTIFICATE-----rootCertificate4-----END CERTIFICATE-----", "-----BEGIN CERTIFICATE-----rootCertificate5-----END CERTIFICATE-----" ], "tsaX5c": [ "-----BEGIN CERTIFICATE-----rootCertificate44-----END CERTIFICATE-----" ] } } } }trustStore: Parent node containing trust store information. Each named entry can be referenced in the trust policy.identities: The identities that deployer trusts.x5c: The PEM representation of signing certificate.tsaX5c: The PEM representation of timestamp certificate.key: The Base64 encoded verification key.keyId: The ASCII representation of keyId.Evaluation
scope, then only the identities associated with scope are trusted for that artifact. e.g., Forwabbit-networks2.ioregistry onlyrootCertificate3is trusted.scope, then the identities without anyscopenode are trusted for that artifact. e.g., Forwabbit-networks999.ioregistry onlyrootCertificate5, rootCertificate5, exampleKey1...are trusted.Trust Policy
Compact mode
{ "trustPolicies": [ { "PolicyName": "Wabbit Corp", "Scopes": ["*"], "TrustStores": [ "wabbit-networks.io" ], "EnforceArtifactExpiryValidation": "enabled/disabled", "EnforceArtifactRevocationValidation": "enabledWithFailOpen/enabledWithFailClose/disabled" }, { "PolicyName": "Wabbit Dev", "Scopes": ["dev.wabbit-networks.io"], "TrustStores": [ "dev.wabbit-networks.io" ], "EnforceArtifactExpiryValidation": "enabled/disabled", "EnforceArtifactRevocationValidation": "enabledWithFailOpen/enabledWithFailClose/disabled" }, { "PolicyName": "Docker Hub", "Scopes": ["docker.io/library", "mirror.wabbit-networks.io/hub"], "TrustStores": [ "docker.io" ], "EnforceArtifactExpiryValidation": "enabled/disabled", "EnforceArtifactRevocationValidation": "enabledWithFailOpen/enabledWithFailClose/disabled" } ] }Detailed mode
{ "trustPolicies": [ { "PolicyName": "userDefinedName", "Scopes": ["registry.example.com"], "TrustStores": [ "store1", "store2" ], "ArtifactExpiryValidations": { "EnforceSignatureExpiryValidation": "enabled/disabled", "EnforceSigningIdentityExpiryValidation": "enabled/disabled", "EnforceTimestampExpiryValidation": "enabled/disabled" }, "ArtifactRevocationValidations": { "EnforceSignatureRevocationValidation": "enabledWithFailOpen/enabledWithFailClose/disabled", "EnforceSigningIdentityRevocationValidation": "enabledWithFailOpen/enabledWithFailClose/disabled", "EnforceTimestampRevocationValidation": "enabledWithFailOpen/enabledWithFailClose/disabled" } } ] }Artifact Integrity Validation
trustPolicy.Artifact Expiry Validation
Revoked Artifact Validation
Since revocation requires network call, the trustPolicy should provide option to either fail-open or fail-close in case the revocation URLs are not reachable.
enabledWithFailOpenmode and revocation URL is unreachable, the system continues to allow the artifact.enabledWithFailClosemode and revocation URL is unreachable, the system MUST rejects the artifact.Extensibility
TBD
Evaluation
Signature evaluation steps(in-progress)
Open Questions
scopewe should support? Isregistrysufficient?Glossary
Original HackMD Doc: https://hackmd.io/s2mrFDOLQuWrV8Ib7ad7Ag
Beta Was this translation helpful? Give feedback.
All reactions