Я использую Jenkins для раскрутки ведомых EC2, которые запускают док-контейнеры.Мои модули terraform размещены в частном облачном репозитории Bitbucket.Я храню закрытый ключ в хранилище параметров AWS SSM.Я добавил ключ в bitbucket и протестировал эту настройку локально в докере, работающем с тем же контейнером, который я использую для конвейера Jenkins.
Я получаю сообщение об ошибке открытого ключа, разрешение отклонено при клонировании модулей terraform.
Error downloading modules: Error loading modules: error downloading 'ssh://git@bitbucket.org/username/tf_modules.git?ref=slim-mgmt': /usr/bin/git exited with 128: Cloning into '.terraform/modules/7b6322b45f5b06dd4f247d0d3dca5237'...
Warning: Permanently added the RSA host key for IP address '18.205.93.2' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Обеззараженная версия моего Jenkinsfile
node('docker_ec2') {
checkout scm
withAWSParameterStore(credentialsId: 'jenkin_cicd', naming: 'relative', path: '/secrets/path/', recursive: true, regionName: 'us-east-1') {
docker.image('private/container:0.7').inside {
stage('Configure Git Access') {
sh "echo '$BITBUCKET_CLOUD' > repo_key"
sh 'chmod 600 repo_key'
sh "export GIT_SSH_COMMAND='ssh -i repo_key'"
sh 'mkdir -p ~/.ssh'
sh 'ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts'
}
stage('Terraform'){
sh 'terraform --version'
sh 'terraform init -upgrade=true -get=true -get-plugins=true'
sh 'terraform validate'
}
}
}
}
Я загружаю содержимое ключа в хранилище параметров AWS SSM с помощью этой команды.
aws ssm put-parameter --region us-east-1 --profile profile-name --type String --name /secrets/path/bitbucket_cloud --value "$(cat aws_bitbucket_key)" --overwrite
Яв состоянии выдать get-параметры для ключа, и он возвращается, я вижу, что он включает \ n в возвращении.Что я предполагаю, что все в порядке.
aws ssm get-parameters --name "/secrets/path/bitbucket_cloud" --profile profile-name
{
"Parameters": [
{
"Name": "/secrets/path/bitbucket_cloud",
"Type": "String",
"Value": "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\nNhAAAAAwEAAQAAAQEArkDZWW9EuAVReKebfOB3l1PE7RFeCx4bh1NGhDrEJWVVtJVQD3g6\n6zhFTRtbORFRW7+PoAzUKy8Zy2Xn013Ws7z8CbZuWdOR8vpIB/bubYFlhrFiZKvNfUCxIS\n7UWZzpNd/
actual key here
A9Nua4/YZSru7+pltpgXciumWwXMJRCfOq\nSIPXsipDF7cI6vpOULyTu6zvGuAbSW6reYEOVxShE0WpfQdUYoipZSs/N3fCgWBJFryFA6\nU/TNerasQt4P79CpAAAAC2p1c3RpbkB0cmFwAQIDBAUGBw==\n-----END OPENSSH PRIVATE KEY-----",
"Version": 3,
"LastModifiedDate": 1538575244.04,
"ARN": "arn:aws:ssm:region:numbers:parameter/secrets/path/bitbucket_cloud"
}
],
"InvalidParameters": []
}
Ключ выглядит хорошо, на выходе журнала Дженкинса.Обеззараженная копия.
+ echo -----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
actual key here
U/TNerasQt4P79CpAAAAC2p1c3RpbkB0cmFwAQIDBAUGBw==
-----END OPENSSH PRIVATE KEY-----
Я выполнил контейнер локально.Я использовал ssm get-параметр, чтобы опустить ключ и вставить его в оператор echo внутри контейнера в файл с именем repo_key.Затем я chmod 600 этот ключ, и настроил Git для использования этого ключа.После этого я смог сделать клон модуля.
Я вроде как на моем конце, куда мне идти.