Giter VIP home page Giter VIP logo

helm-charts-flex's Introduction

SPIFFE Logo

Production Phase

The Secure Production Identity Framework For Everyone (SPIFFE) Project defines a framework and set of standards for identifying and securing communications between application services. At its core, SPIFFE is:

  • A standard defining how services identify themselves to each other. These are called SPIFFE IDs and are implemented as Uniform Resource Identifiers (URIs).

  • A standard for encoding SPIFFE IDs in a cryptographically-verifiable document called a SPIFFE Verifiable Identity Document or SVIDs.

  • An API specification for issuing and/or retrieving SVIDs. This is the Workload API.

The SPIFFE Project has a reference implementation, the SPIRE (the SPIFFE Runtime Environment), that in addition to the above, it:

  • Performs node and workload attestation.

  • Implements a signing framework for securely issuing and renewing SVIDs.

  • Provides an API for registering nodes and workloads, along with their designated SPIFFE IDs.

  • Provides and manages the rotation of keys and certs for mutual authentication and encryption between workloads.

  • Simplifies access from identified services to secret stores, databases, services meshes and cloud provider services.

  • Interoperability and federation to SPIFFE compatible systems across heterogeneous environments and administrative trust boundaries.

SPIFFE is a graduated project of the Cloud Native Computing Foundation (CNCF). If you are an organization that wants to help shape the evolution of technologies that are container-packaged, dynamically-scheduled and microservices-oriented, consider joining the CNCF.

SPIFFE Standards

Getting Started

  • spiffe: This repository includes the SPIFFE ID, SVID and Workload API specifications, example code, and tests, as well as project governance, policies, and processes.
  • spire: This is a reference implementation of SPIFFE and the SPIFFE Workload API that can be run on and across varying hosting environments.
  • go-spiffe: Golang client libraries.
  • java-spiffe: Java client libraries

Communications

Contribute

SIGs & Working Groups

Most community activity is organized into Special Interest Groups (SIGs), time-bounded working groups, and our monthly community-wide meetings. SIGs follow these guidelines, although each may operate differently depending on their needs and workflows. Each group's material can be found in the /community directory of this repository.

Name Lead Group Slack Channel Meetings
SIG-Community Umair Khan (HPE) Here Here Notes
SIG-Spec Evan Gilman (VMware) Here Here Notes
SIG-SPIRE Daniel Feldman (HPE) Here Here Notes

Follow the SPIFFE Project You can find us on Github and Twitter.

SPIFFE SSC

The SPIFFE Steering Committee meets on a regular cadence to review project progress, address maintainer needs, and provide feedback on strategic direction and industry trends. Community members interested in joining this call can find details below.

To contact the SSC privately, please send an email to [email protected].

helm-charts-flex's People

Contributors

amoore877 avatar edwbuck avatar kfox1111 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

edwbuck marked

helm-charts-flex's Issues

Determine the impact of custom plugin names

In a custom plugin, the pattern is

plugins {
  <pluginType> <pluginName> {
     plugin_data {
         plugin_cmd = "/usr/bin/customKeyManager"
         plugin_checksum = "3f363c538588bbbbbcbe5374274c2c01f0d1387e012b68a22178e3dd790dc26c"
         enabled = true
         plugin_data {
            <stuff>
         }
     }
  }
}

Currently our custom plugins permit the user to set the custom plugin name.

The following items are not clear:

  • Should the name be specified by the user
  • Should the name be hardwired to "custom" or some other fixed string
  • Does the name have to match the custom plugin in some way

We should decide on which if the above policies is the correct one, document it, and adjust the charts to enforce the policy

Make with podman permission issue

$ make container_cmd=podman
podman run -ti --rm -v /home/kfox/git/spire-helm-charts-flex:/apps docker://alpine/helm:3.11.1 lint spire-flex -f spire-flex/values.yaml
Trying to pull docker.io/alpine/helm:3.11.1...
Getting image source signatures
Copying blob 05a2708c4a81 done  
Copying blob 796e85e1de57 done  
Copying blob 63b65145d645 done  
Copying blob 4f4fb700ef54 done  
Copying config b7831bc301 done  
Writing manifest to image destination
Storing signatures
==> Linting spire-flex

1 chart(s) linted, 0 chart(s) failed
podman run -ti --rm -v /home/kfox/git/spire-helm-charts-flex:/apps docker://helmunittest/helm-unittest:3.11.1-0.3.0 spire-flex/ -d -f tests/*.yaml
Trying to pull docker.io/helmunittest/helm-unittest:3.11.1-0.3.0...
Getting image source signatures
Copying blob 8921db27df28 done  
Copying blob a37700b44b78 done  
Copying blob aac2ca54914b done  
Copying blob 00d47daa0b62 done  
Copying config ec55be8ef8 done  
Writing manifest to image destination
Storing signatures

### Chart [ spire-flex ] spire-flex/

 FAIL  	spire-flex/tests/agentDaemonsetSelectorConsistency.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckBindPort.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckDefault.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckDisabled.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckEnabled.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckIPv4BindAddress.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckIPv4BindAddressAny.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckIPv4BindAddress_failOnBadValue.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckIPv6BindAddress.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckIPv6BindAddressAny.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckIPv6BindAddress_failOnBadValue.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckLivePath.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied

 FAIL  	spire-flex/tests/agentHealthCheckReadyPath.yaml
	- Execution Error: 
		mkdir spire-flex/tests/__snapshot__: permission denied


Charts:      1 failed, 0 passed, 1 total
Test Suites: 13 failed, 13 errored, 0 passed, 13 total
Tests:       0 passed, 0 total
Snapshot:    0 passed, 0 total
Time:        3.461462ms

Error: plugin "unittest" exited with error
make: *** [Makefile:14: test] Error 1

Agent pod needs mkdir command initContainer for KeyManager Disk

When the agent pod is initializing with the Disk KeyManager activated, it will mount a hostPath volume in order to have a persistent location for the KeyManager's backing store. The problem is that such a location might not exist within a typicaly operating system.

What is needed is an initcontainer within the daemonset that performs the corresponding OS "mkdir" command to install the directory such that the hostPath volume can be created unblocking the launch of the agent under the Disk KeyManager configuration.

This mkdir should be recursive (mkdir -p) to avoid loops. Ideally a very popular image should be used (alpine?) and the command "mkdir" should be the visible element on the pod's launching arguments.

Add agent image pull policy

Based on the initial design ideas, we need to add agent image pull policies to the agent-daemonset.

This would add the configuration points:

  • image.pullPolicy (default depends on image.tag)
  • agent.image.pullPolicy (default depends on agent.image.tag)

The value is constrained to one of "never", "IfNotPresent", and "always"

  • If the tag value is "latest", or nil/empty the default is "always"
  • If the tag value is not "latest" or nil/empty the default is "IfNotPresent"

Set agent bootstrap elements

The following agent flags all control agent bootstrapping,
the process by which an agent obtains a CA permitting it
to validate and trust the TLS response of the server.

agent {
  insecure_bootstrap = true
  trust_bundle_url = protocol://server/path/
  trust_bundle_path = /path/
}

We need one enumeration type setting to decide which of the
three approaches is used, and for the url and path options,
we need another flag each for specifying the url or path
value.

Add server service

The agent requires a server address / hostname so it can launch. This name is used to connect to the server.

In our deployments, we have two options:

  • Launch a single instance of the server; and, directly bind to that instance
  • Launch a k8s service, and indirectly bind to the instances exposed by that service.

The advantages of the latter are many.

  • It permits the scaling of server instances without reconfiguration.

  • It provides a text DNS name that is automatically managed by the Kubernetes environment.

    This request only covers the support of the latter approach.

Expectations:

  • Unit testing that the service name and the agent-config settings refer to the same service
  • Different service names for each installation within a namespace
  • The service name can be configured to have a specific value, as well as a sensible default value.

Add agent image controls

Based on the initial design ideas, we need to add the base image to the agent-deployment set.

This would add the configuration points:

  • image.registry (defaults to ghcr.io)
  • image.registryPort (defaults to nothing)
  • image.tag (defaults to .Chart.appVersion)
  • agent.image.repository (defaults to .image.repository's value)
  • agent.image.repositoryPort (defaults to .image.repositoryPort's value)
  • agent.image.name (defaults to "spire/spire-agent")
  • agent.image.tag (defaults to .image.tag)

Add agent config volume

A volume needs to exist to hold the agent config file. This volume should be a config map volume.

The agent should have a volume mount that binds the agent to the volume. The agent command line parameters should reference the agent-configmap's agent configuration as a file at its mounted location.

It is unclear if there is a need to specify the volume mount path, but for biodegradability, the volume name and mount path names should not be configurable.

Document Defaults

Its not clear in all cases in the documentation what defaults values have.

Installation testing framework

An ideal framework should:

  • call helm install with configurable command line parameters / values.yaml files
  • have the ability to call other helm commands to verify and confirm helm output
  • have the ability to call helm upgrade to test updating of installation
  • have the ability to call helm rollback to test reversions
  • have the ability to call kubectl commands to verify elements outside of helm's output
  • have the ability to verify the helm test output
  • have the ability to launch pods to perform further testing.

Ideally this would be configurable with YAML files, to reduce developer overhead, depend on tooling outside of the project that can be packaged with docker, and produce a configurable output that supports both command line reporting and junit xml reporting.

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.