Google and Bazel consulting firm Aspect announced version 1.0 of Bazel plugin rules_oci
. Aimed to simplify secure container image creation using Bazel with special emphasis on Distroless images, the new plugin obsoletes rules_docker
and improves it on a number of counts.
Both rules_oci
and rules_docker
, the latter now in maintenance mode, can automate the process of securely creating container images. Bazel, says Google engineer Appu Goundan, is ideal for this task thanks to it using integrity hashes to cache dependencies along with the "Trust on first use" principle, which will consider any change in the integrity hash associated to a dependency as a sign of tampering.
While rules_oci
can be used to create any kind of container image, Google is specifically aiming it to the creation of distroless images as a way to improve supply-chain security:
[Distroless images] restrict what's in your runtime container to precisely what's necessary for your app, which is a best practice employed by Google and other tech companies that have used containers in production for many years. Using minimal base images reduces the burden of managing risks associated with security vulnerabilities, licensing, and governance issues in the supply chain for building applications.
One of the reasons why rules_oci
has been introduced is its support for creating container images for multiple runtimes and formats, as specified by the Open Container Initiate, especially podman. On the contrary, rules_docker
, as its name implies, is tied to creating Docker images specifically. rules_oci
also benefits from a simplified architecture, thanks to the fact that it can leverage tools such as Crane, Skopeo, and Zot for container manipulation tasks like managing a local registry.
Additionally, rules_oci
strives to be language-independent, while rules_oci
includes specific rule sets for each supported language to deal in most cases with the peculiarities each language ecosystem has about dependency management. This will make the new plugin easier to maintain and use it with new languages, says Goundan. Google is providing, in any case, language-specific examples to help create container images using rules_oci
for a number of languages, including C/C++, Go, Java, etc.
There are other rules_oci
features, explains Goundan, which are especially relevant to supply-chain security. In particular, rules_oci
uses Bazel to fetch layers from remote registries, which also uses code signing to enable authorship verification.
Having reached 1.0 means rules_oci
provides a stronger stability guarantee, following the semver standard, and the promise that future releases won't include breaking API changes. Aspect also provided a migration guide to make it easier to replace rules_docker
with rules_oci
.