# #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'
Я понимал, что это заменит значение 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