Git Product home page Git Product logo

ratify's Introduction

Ratify

Is a verification engine as a binary executable and on Kubernetes which enables verification of artifact security metadata and admits for deployment only those that comply with policies you create.

Go Report Card build-pr OpenSSF Scorecard Go Reference

Table of Contents

Quick Start

Please see Ratify website for a quick start demo.

Community meetings

  • Agenda: https://hackmd.io/ABueHjizRz2iFQpWnQrnNA
  • We hold a weekly Ratify community meeting on Thurs 12:00 - 1:00 AM (UTC)
    Get Ratify Community Meeting Calendar here
  • We meet regularly to discuss and prioritize issues. The meeting may get cancelled due to holidays, all cancellation will be posted to meeting notes prior to the meeting.
  • Reach out on Slack at cloud-native.slack.com#ratify. If you're not already a member of cloud-native slack channel, first add yourself here.

Pull Request Review Series

  • We hold a weekly Ratify Pull Request Review Series on Mondays 5-6 pm PST.
  • People are able to use this time to walk through any Pull Requests and seek feedback from others in the Community. If there are no PR to review, the meeting will be cancelled during that week.
  • Reach out on Slack if you want to reserve a session for review or during our weekly community meetings.

Documents

Please see the Ratify website for more in-depth information.

Meeting notes for weekly project syncs can be found here

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct.

For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Release Management

The Ratify release process is defined in RELEASES.md.

Licensing

This project is released under the Apache-2.0 License.

Trademark

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

ratify's People

Contributors

akashsinghal avatar aramase avatar binbin-li avatar bridgetkromhout avatar byronchien avatar dependabot[bot] avatar dtzar avatar duffney avatar etrexel avatar feynmanzhou avatar fseldow avatar jimmyraywv avatar joshuaphelpsms avatar junczhu avatar kjeffc avatar lee0c avatar luisdlp avatar mannbiher avatar mluker avatar mnltejaswini avatar nathana1 avatar noelbundick-msft avatar sajayantony avatar sozercan avatar step-security-bot avatar suganyas avatar surajssd avatar susanshi avatar two-hearts avatar yizha1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ratify's Issues

Enable cosign validation on EKS

The framework should support cosign verification with ECR at this point and would focus on getting a walkthrough before we release an alpha of this project.

The goal here is to showcase that ratify successfully runs on AWS with current capabilities without having to host external components like a fork of distribution or going to ACR that supports Reference Artifacts.

AWS planning support for References artifacts and moving to Notary for EKS should be a config update from the sample perspective.

Makefile not invoking tests

Currently the tests aren't executing as a part of the PR validation. Makefile currently doesn't invoke all the tests .

Create unified chart for E2E

For being able to try our ratify quickly, we can provide a simple unified helm chart that combines the gatekeeper external data provider with Ratify.

Require only one valid signature

In the current referrers list below there are multiple signatures -

❯ hora referrer list -s localhost:5000/net-monitor@sha256:e35755f713320922144f3bff9f0f78ceb53fc048b0a0b755d2bf296476b26f1c
sha256:e35755f713320922144f3bff9f0f78ceb53fc048b0a0b755d2bf296476b26f1c
└── ociregistry
    ├── [application/x.example.sbom.v0]sha256:a3da10a5c5ee46f9dbb05f98601497d6d42f95174940355a2d583b5362ed57db
    │   └── [application/vnd.cncf.notary.v2]sha256:407387541c983349b1b8b5d495ea67a664dfddce86ca507890d6a726a4a5eb89
    ├── [application/vnd.cncf.notary.v2]sha256:54c40024407516cb20fe6dd6897755fc75f936549dba716a163b8466b3c33c7c
    ├── [application/vnd.cncf.notary.v2]sha256:99f7614613f8d6656167cf356a1ef817775b941f7e144013f08a758bdefb3069
    └── [application/vnd.cncf.notary.v2]sha256:b710b362ba2483b457f623ef19049bf1bb5cd4c75691e4fb4305d993efa2cb07

There may be invalid signatures in this case but the only requirement here is that the is atleast one valid signature as per configuration policy.

There maybe a possibility of requiring multiple signatures. For e.g. we want to ensure that an image is signed by docker hub and also by your QA environment. We can track the multi signature configuration in another issue.

Define VerificationResult schema

Consider other fields in the verification results response

  1. The response needs to identify that requesting digest
  2. Success should indicate which is the reference that was actually verfified.
{
  "isSuccess": true,
  "verifierReports": [
    {
      "IsSuccess": false,
      "Name": "nv2verifier",
      "Results": [
        "verification failure: x509: certificate signed by unknown authority"
      ]
    },
    {
      "IsSuccess": false,
      "Name": "nv2verifier",
      "Results": [
        "verification failure: x509: certificate signed by unknown authority"
      ]
    },
    {
      "IsSuccess": true,
      "Name": "nv2verifier",
      "Results": [
        "Notary verification success"
      ]
    }
  ]
}

Create release v0.1.1

  • agree on the release name (v0.1.1)
  • create a branch named v0.1.1 with everything to be released
  • #94
  • create a signed tag named v0.1.1 and push
  • verify release looks correct and publish

Prototype Cosign

The referrers store can support looking at different locations. Cosign uses tag naming scheme and can be implemented through the referrers store which can discover the related tag and download the reference and provide to the verifier.

Improve Ratify Helm chart experience

The quick-start process currently involves installing Gatekeeper from "source" (it uses prebuilt container images but needs the build process to render the Kubernetes manifests) and using our repo's makefile to install things in the correct order.

We should try to have a single chart experience so that it is easy for users to install Ratify.

This will involve the following:

  • Having Gatekeeper added as a dependency of the Helm chart
  • Having all Ratify resources installed as part of a single Helm chart
  • Ensuring that proper resource deployment order is followed so that the ConstraintTemplate is deployed and ready before the Constraint is applied

Current blockers for this are:

  • External data provider feature working in upstream Gatekeeper Helm chart
  • A proper ordering mechanism for Helm to be able to manage Gatekeeper ConstraintTemplates and Constraints

Release ratify version v0.1.0

  1. agree on the release name (v0.1.0)
  2. create a branch named v0.1.0 with everything to be released
  3. create a signed tag named v0.1.0 and push
  4. verify release looks correct and publish

Support version command on the CLI

Currently the CLI doesn't support showing the version. It would be useful to have the CLI and plugins show this information

➜ ratify version
Version:        0.2.0-alpha.1
Go version:     go1.16.2
Git commit:     f01d9.....
Git tree state: clean

Support verifying TUF metadata

As an extensibility scenario, create a prototype that show cases of how TUF metadata that is persisted in OCI registry using the artifacts model can be fetched and verified using TUF tools

Create a walkthrough for Azure

Goals

  1. Enable developers to get quickly started on AKS
  2. Ensure they have an ability to deploy using simple commands. For e.g. helm install a complete e2e with the provider enabled and good defaults for signature validation.
  3. Ensure there is a test image that they can validate and view logs to see the validation results.

Design order to handle timeliness of artifacts

This issue needs more details to identify how hora can handle stale artifacts. Should we depend on things like signature expiry or should we focus ensuring that the referrers store can return only the newest of an artifact?

Support remote signature verification using Azure Key Vault

If notation has the support to enable remote signature verification we would be able to leverage that. Currently notation doesn't have libraries that support Azure Key Vault. This model will also be used for remote signature verification for other cloud providers.

Threat model for Ratify

Write the threat model document for Hora. This is mainly along invoking plugins from the framework, trusting the outputs returned by them.

Define how plugins are built/packaged

Only the sbom plugin is included in the current release packaging. We need to determine which plugins are released and where/how they are packaged.

Define plugin Type - Builtin/Custom

Plugins can be custom (out or proc) executables and can be discovered by convention or path configured in the configuration provided to hora(CLI/Server)
Builtin plugins are executed as interfaces. We can consider if a custom plugin can communicate through GRPC which would require us to define a GPRC interface for plugins.

config path with ~ doesn't work correctly

When config.json specifies

                "verificationCerts": [
                    "~/.config/notation/certificate/wabbit-networks.io.crt"
                  ]

ratify verify can't find that file:

$ ratify verify -s $IMAGE_DIGEST_REF                                                                                                                                                                                                                                                                    
Error: open ~/.config/notation/certificate/wabbit-networks.io.crt: no such file or directory

even if the file exists:

$ cat ~/.config/notation/certificate/wabbit-networks.io.crt                                                                                                                                                                                                                 
-----BEGIN CERTIFICATE-----
...

Changing to absolute path in config.json resolves this issue.

Support dynamic configuration

Enable an extensible model so that plugin specific implementations resolve configuration dynamically. For e.g. the notary verifier might need to acquire keys from Vault or AzureKV and the values for these would have to be passed in during initialization and need not be hard coded in file. Another scenario is that they location of the vault might be different in different environment and so having a base configuration that can be injected with dynamic values enables developers to checkin a template configuration and environment configuration(variables) can provide the actual location of the vault endpoint.

  • E.g. how to enable adding a break glass by adding exception to an image without redeploying a full configuration.

Items to accomplish this:

  • #215 - File watcher based implementation
  • #193

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.