Использование секретов GCP как части облачной сборки

# #google-cloud-platform #google-cloud-build #google-secret-manager

Вопрос:

Я пытаюсь передать конфиденциальную информацию в сценарий bash, который является частью нашего процесса сборки облака, я следовал документам CloudBuild, чтобы попытаться настроить все это.
после того, как многие разные шины скопировали пример docker в качестве теста, даже это не работает.
Вот что у меня есть на данный момент

 *gcloud secrets list*
NAME     CREATED              REPLICATION_POLICY  LOCATIONS
SECRET1  2021-08-18T04:37:47  automatic           -
SECRET2  2021-08-18T04:38:11  automatic           -

*gcloud secrets versions access latest --secret="SECRET1"*
Secret2Value
*gcloud secrets versions access latest --secret="SECRET2"*
Secret2Value

**cloudbuild.yaml**
steps:
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', 'docker login --username=$USERNAME --password=$PASSWORD']
  secretEnv: ['USERNAME', 'PASSWORD']
availableSecrets:
  secretManager:
  - versionName: projects/$PROJECT_ID/secrets/SECRET1/versions/1
    env: 'PASSWORD'
  - versionName: projects/$PROJECT_ID/secrets/SECRET2/versions/latest
    env: 'USERNAME'
 

Выполнение CloudBuild

Я понимал, что это заменит значение SECRET1 и SECRET2 в ENV ИМЕНИ ПОЛЬЗОВАТЕЛЯ и ПАРОЛЯ, но я получаю $ИМЯ ПОЛЬЗОВАТЕЛЯ и $ПАРОЛЬ
Аргументы bash -c docker логин —имя пользователя=$ИМЯ ПОЛЬЗОВАТЕЛЯ —пароль=$ПАРОЛЬ

Такое чувство, что я упустил что-то простое, но фундаментальное

== Обновление ==
Вот полный журнал сборки

 FETCHSOURCE
hint: Using 'master' as the name for the initial branch. This default     branch name
hint: is subject to change. To configure the initial branch name to use     in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:   git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this     command:
hint: 
hint:   git branch -m <name>
Initialized empty Git repository in /workspace/.git/
From https://source.developers.google.com/p/amiti-plex-can-    dev/r/bitbucket_noldortech_amiti-payments
 * branch            a72363459d9ff5bed31411e960cc3e021febc322 ->     FETCH_HEAD
HEAD is now at a723634 Secrets test 1
BUILD
Already have image (with digest): gcr.io/cloud-builders/docker
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://registry-1.docker.io/v2/":     unauthorized: incorrect username or password
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited     with non-zero status: 1
 

== Обновление 2==
После тестирования приведенных ниже команд echo я переключился на использование сценария, что мне действительно нужно.

 **Yaml File:**
steps:
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', 'echo Username=$USERNAME amp;amp; echo Password=$PASSWORD']
  secretEnv: ['USERNAME', 'PASSWORD']
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['cloudbuilds/script.sh', '$USERNAME', '$PASSWORD']
  secretEnv: ['USERNAME', 'PASSWORD']
availableSecrets:
  secretManager:
  - versionName: projects/$PROJECT_ID/secrets/SECRET1/versions/1
    env: 'PASSWORD'
  - versionName: projects/$PROJECT_ID/secrets/SECRET2/versions/latest
    env: 'USERNAME'
    
**Script:**
#/bin/bash
secretVar1="$1"
secretVar2="$2"
printf "nnVARIABLESnSecret1: $secretVar1nSecret2: $secretVar2nn"

**Build Log:**
BUILD
Starting Step #0
Step #0: Already have image (with digest): gcr.io/cloud-builders/docker
Step #0: Username=Secret2Value
Step #0: Password=Secret1Value
Finished Step #0
Starting Step #1
Step #1: Already have image (with digest): gcr.io/cloud-builders/docker
Step #1: 
Step #1: 
Step #1: VARIABLES
Step #1: Secret1: $USERNAME
Step #1: Secret2: $PASSWORD
Step #1: 
Finished Step #1
PUSH
DONE
 

Комментарии:

1. У вас есть более подробная информация о сбое задания в журналах?

2. @guillaumeblaquiere Я добавил журнал сборки

3. Неверное имя пользователя и пароль. Вы уверены в своих ценностях?

4. Имя пользователя/пароль недействительны, но это потому, что он даже не вытаскивает их из секретов. Он передает $ИМЯ ПОЛЬЗОВАТЕЛЯ и $ПАРОЛЬ команде входа в систему вместо значений секретов

5. Можете ли вы проверить значение, полученное из облачной сборки, изменив значение arg на это: args: ['-c', 'echo $$USERNAME amp;amp; echo $$PASSWORD']

Ответ №1:

ИМЯ ПОЛЬЗОВАТЕЛЯ И ПАРОЛЬ-это переменные среды, для их расширения в командной строке вам необходимо выполнить команду через оболочку. (Обратите внимание, что это считается плохой практикой с точки зрения безопасности.)

Вот почему во втором обновлении работает только первый шаг.

Комментарии:

1. Я не понимаю, что вы имеете в виду, запустив его через оболочку?

2. bash -c «команда с аргументом здесь» оценит «команду с аргументом здесь» и развернет любую переменную среды.

Ответ №2:

Наконец-то я получил правильный синтаксис yaml для выполнения моего сценария так, как мне нужно

 steps:
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', ". ./cloudbuilds/script.sh $SOMEVAR1 $SOMEVAR2"]
  secretEnv: ['SOMEVAR1', 'SOMEVAR2']
availableSecrets:
  secretManager:
  - versionName: projects/$PROJECT_ID/secrets/SECRET1/versions/1
    env: 'SOMEVAR2'
  - versionName: projects/$PROJECT_ID/secrets/SECRET2/versions/latest
    env: 'SOMEVAR1'

BUILD
Already have image (with digest): gcr.io/cloud-builders/docker
VARIABLES
Secret1: Secret2Value
Secret2: Secret1Value
PUSH
DONE