Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Secrets #26

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CommandLineTool.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ $graph:

## Changelog for v1.3.0-dev1

* Added `secret` option on [input parameters](#InputParameter)
to request special handling of secrets such as passwords and
API tokens.

See also the [CWL Workflow Description, v1.3.0-dev1 changelog](Workflow.html#Changelog).
For other changes since CWL v1.0, see the
[CWL Command Line Tool Description, v1.1 changelog](https://www.commonwl.org/v1.1/CommandLineTool.html#Changelog)
Expand Down
64 changes: 63 additions & 1 deletion Process.yml
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,69 @@ $graph:
from the input object, or if the value of the parameter in the input
object is `null`. Default values are applied before evaluating expressions
(e.g. dependent `valueFrom` fields).

- name: secret
type: ["null", boolean, string]
doc: |
Indicates this input parameter value is sensitive.
Implementations should apply special handling to secret values
to avoid displaying them in logs, including them in output, or
otherwise making them visible or accessible in any way beyond
what is required to make the value of the secret input
parameter available to workflow processes that need it.

This feature is intended to provide a safer way to handle
credentials such as passwords and API tokens.

Possible values of the `secret` field can be:

* null or not provided (default, the input parameter is not secret)
* false (same as null)
* true (parameter is secret)
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
* false (same as null)
* true (parameter is secret)
* `false` (same as null)
* `true` (parameter is secret)

* a non-empty string (parameter is secret, and may be looked up in platform storage)

If the value of `secret` is a string, this is a lookup key to
be used to fetch a secret value from the workflow platform
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
If the value of `secret` is a string, this is a lookup key to
be used to fetch a secret value from the workflow platform
If the value of `secret` is a string, this is a lookup key that can
be used to fetch a secret value from the workflow platform

secret store. This assumes a model where a non-sensitive
lookup key is passed to the secret store and a sensitive
string value (the password, API token, etc) is returned.

The format of this lookup key, as well as management, access
permissions, and authentication for the secret store are
implementation specific and out of scope for this document.

If the input parameter is a secret, the `type` of the input
parameter must only consist of `string`, `array<string>`, or
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
parameter must only consist of `string`, `array<string>`, or
parameter must only consist of `string`, `string[]`, or

`null`.

If `secret` is a string and the platform supports looking up
credentials, the input parameter is implicitly optional for
the caller, and platform should look up the secret to fill in
the input parameter value when not provided by the caller.

An explicit value provided by the caller always takes
precedence over looking up a value, i.e. checking the secret
store must only happen if the caller did not provide an
explicit value for this secret parameter, or the value is
null.

If the platform does not support secrets lookup, a string
value of `secret` is treated like boolean true, indicating the
parameter is secret, but must be provided in the input
document (unless marked as optional).

Failure to look up the secret (for example, due to denial of
access) may yield a value of "null". Execution continues only
if the parameter is optional (i.e. "null" is an accepted
type). However implementations may, at user option, treat
failure to look up a secret as a fatal error.

Workflow engines should verify that, when a secret is passed
through multiple levels (e.g. from a parent workflow to a
sub-workflow to a command line tool), it is secret at every
level, for example through a check that secret inputs are only
be passed to workflow steps where the inputs are also marked
as secret, or that secret inputs to a workflow step are
themselves secret at the parent workflow level.

- name: OutputParameter
type: record
Expand Down
5 changes: 5 additions & 0 deletions Workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ $graph:
CWL group.

## Changelog

* Added `secret` option on [input parameters](#InputParameter)
to request special handling of secrets such as passwords and
API tokens.

See also the [CWL Command Line Tool Description, v1.3.0-dev1 changelog](CommandLineTool.html#Changelog).
For other changes since CWL v1.0, see the
[CWL Workflow Description, v1.1 changelog](https://www.commonwl.org/v1.1/Workflow.html#Changelog)
Expand Down
Loading