From b730dd3f3b73992bde2c5c58b17df491e85b4d93 Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Sun, 28 Jul 2024 09:41:43 -0400 Subject: [PATCH] chore: ./hack/generate-ta-tasks.sh --- task/oci-copy-oci-ta/0.1/README.md | 1 + task/oci-copy-oci-ta/0.1/oci-copy-oci-ta.yaml | 51 ++++++++++++++++--- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/task/oci-copy-oci-ta/0.1/README.md b/task/oci-copy-oci-ta/0.1/README.md index 65162767f5..15e9b788a8 100644 --- a/task/oci-copy-oci-ta/0.1/README.md +++ b/task/oci-copy-oci-ta/0.1/README.md @@ -5,6 +5,7 @@ Given a file in the user's source directory, copy content from arbitrary urls in ## Parameters |name|description|default value|required| |---|---|---|---| +|AWS_SECRET_NAME|Name of a secret which will be made available to the build to construct Authorization headers for requests to Amazon S3. If specified, this will take precedence over BEARER_TOKEN_SECRET_NAME.|does-not-exist|false| |BEARER_TOKEN_SECRET_NAME|Name of a secret which will be made available to the build as an Authorization header. Note, the token will be sent to all servers found in the oci-copy.yaml file. If you do not wish to send the token to all servers, different taskruns and therefore different oci artifacts must be used.|does-not-exist|false| |IMAGE|Reference of the image we will push||true| |OCI_COPY_FILE|Path to the oci copy file.|./oci-copy.yaml|false| diff --git a/task/oci-copy-oci-ta/0.1/oci-copy-oci-ta.yaml b/task/oci-copy-oci-ta/0.1/oci-copy-oci-ta.yaml index f07ca37760..38eee84c3f 100644 --- a/task/oci-copy-oci-ta/0.1/oci-copy-oci-ta.yaml +++ b/task/oci-copy-oci-ta/0.1/oci-copy-oci-ta.yaml @@ -13,6 +13,12 @@ spec: description: Given a file in the user's source directory, copy content from arbitrary urls into the OCI registry. params: + - name: AWS_SECRET_NAME + description: Name of a secret which will be made available to the build + to construct Authorization headers for requests to Amazon S3. If specified, + this will take precedence over BEARER_TOKEN_SECRET_NAME. + type: string + default: does-not-exist - name: BEARER_TOKEN_SECRET_NAME description: Name of a secret which will be made available to the build as an Authorization header. Note, the token will be sent to all servers @@ -104,17 +110,46 @@ spec: key: token name: $(params.BEARER_TOKEN_SECRET_NAME) optional: true + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: aws_access_key_id + name: $(params.AWS_SECRET_NAME) + optional: true + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: aws_secret_access_key + name: $(params.AWS_SECRET_NAME) + optional: true script: | set -e set -o pipefail - CURL_ARGS=() - if [ -n "${BEARER_TOKEN}" ]; then - echo "Found bearer token. Using it for authentication." - CURL_ARGS+=(-H "Authorization: Bearer ${BEARER_TOKEN}") - else - echo "Proceeding with anonymous requests" - fi + download() { + url="$1" + file="$2" + method="GET" + + curl_args=(--fail --silent --show-error) + if [ -n "${AWS_ACCESS_KEY_ID}" ] && [ -n "${AWS_SECRET_ACCESS_KEY}" ]; then + echo "Found both aws credentials secret with both aws_access_key_id and aws_secret_access_key. Assuming S3 bucket" + path=$(echo $url | cut -d/ -f4-) + echo "Bucket path is $path" + date="$(date -u '+%a, %e %b %Y %H:%M:%S +0000')" + printf -v string_to_sign "%s\n\n\n%s\n%s" "$method" "$date" "/$path" + echo "String to sign is $string_to_sign" + signature=$(echo -n "$string_to_sign" | openssl dgst -sha1 -binary -hmac "${AWS_SECRET_ACCESS_KEY}" | openssl base64) + authorization="AWS ${AWS_ACCESS_KEY_ID}:${signature}" + curl "${curl_args[@]}" -H "Date: ${date}" -H "Authorization: ${authorization}" --location "$url" -o "$file" + elif [ -n "${BEARER_TOKEN}" ]; then + echo "Found bearer token. Using it for authentication." + curl "${curl_args[@]}" -H "Authorization: Bearer ${BEARER_TOKEN}" --location "$url" -o "$file" + else + echo "Proceeding with anonymous requests" + curl "${curl_args[@]}" --location "$url" -o "$file" + fi + } set -u @@ -162,7 +197,7 @@ spec: else echo "Blob for ${OCI_FILENAME} does not yet exist in the registry at ${REPO}@sha256:${OCI_ARTIFACT_DIGEST}." echo "Downloading $OCI_SOURCE to $OCI_FILENAME" - curl "${CURL_ARGS[@]}" --fail --silent --show-error --location $OCI_SOURCE -o $OCI_FILENAME + download $OCI_SOURCE $OCI_FILENAME echo "Confirming that digest of $OCI_FILENAME matches expected $OCI_ARTIFACT_DIGEST" echo "$OCI_ARTIFACT_DIGEST $OCI_FILENAME" | sha256sum --check