JenkinsのパイプラインでAzureの管理をする時に、Azure Key Vaultにあるシークレットにアクセスできると、デプロイの自動化などを簡単に行えます。
#使用するもの
- Jenkins - https://www.jenkins.io/
- Jenkins Helm Chart - https://github.com/jenkinsci/helm-charts
- Jenkins plugin
- Azure Key Vault - https://plugins.jenkins.io/azure-keyvault/
- Configuration as Code - https://plugins.jenkins.io/configuration-as-code/
#Pluginの実装
プラグインをインストール
jenkins-helm.yaml
InstallPlugins:
- configuration-as-code:latest
- azure-keyvault:latest
Azure Key Vaultにアクセスするための設定。
jenkins-jcasc.yaml
JCasC:
enabled: true
.
.
.
ConfigScripts:
welcome-message: |
jenkins:
credentials:
system:
domainCredentials:
- credentials:
- azure:
azureEnvironmentName: "Azure"
clientId: "1234567-89123-....."
clientSecret: "**********************"
description: "Azure SP"
id: "service-principal-myapp"
scope: SYSTEM
subscriptionId: "987654-321987....."
tenant: "654321-654321..."
unclassified:
azureKeyVault:
keyVaultURL: https://myapp-keyvault.vault.azure.net
credentialID: service-principal-myapp
上で設定した使用するサービスプリンシパルにKey VaultのGet
、List
権限を付与します。Terraformを使う場合は以下のような感じです。
resource "azurerm_key_vault" "my_keys" {
.
.
.
access_policy {
secret_permissions = [
"Get",
"List",
]
object_id = var.azure_spn_id
tenant_id = var.azure_tenant_id
}
}
#Jenkinsからシークレットを取得
設定後、Azure Key ValutのシークレットをJenkinsからアクセスできるようになります。
パイプラインからシークレットを取得する場合は、このような感じでできます。
environment {
AZ_MY_SECRET = credentials('az-my-secret')
}
これを使うと、システムの自動化などで必要なシークレットはAzure Key Valutで一元管理し、JenkinsのCredentialsに作る必要はなくなります。
この記事は
"3000文字Tips - 知ると便利なTipsをみんなへ届けよう"の投稿記事です。