Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

azure keyvault secrets provider 본문

DevOps

azure keyvault secrets provider

모이스쳐라이징 2023. 10. 17. 00:55

패스워드 같은 민감한 정보들은 yaml에 직접 사용하는게 아닌 keyvault에서 불러오기 위함

 

 

az command로 provider를 활성화 합니다.

az aks addon enable --addon azure-keyvault-secrets-provider -n AKS-DevOps -g devops

 

keyvault를 생성하고 secret를 생성합니다.
[ RBAC 기반으로 만듭니다 --enable-rbac-authorization true ]

 

KV=aks-test01
SECRET1=password1
VALUE1=123
SECRET2=password2
VALUE2=123
k8sRG=K8S
storageRG=storage
CLUSTER=Backend-Test
region=KoreaCentral

az aks addon enable --addon azure-keyvault-secrets-provider -n $CLUSTER -g $k8sRG

az keyvault create --name $KV --resource-group $storageRG --location $region \
    --enable-rbac-authorization true
 
SUBSCRIPTION_ID=$(az account show --query id -o tsv)

# 로그인 되어 있는 계정의 ID를 가져와서 Keyvault에 권한을 넣습니다.
USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)

az role assignment create --assignee-object-id $USER_OBJECT_ID --role "Key Vault Administrator" \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$storageRG/providers/Microsoft.KeyVault/vaults/$KV

az keyvault secret set --vault-name $KV --name $SECRET1 --value $VALUE1
az keyvault secret set --vault-name $KV --name $SECRET2 --value $VALUE2

 

 

aks 리소스 그룹의 ID를 가져오고, 해당 ID를 사용할 keyvault에 비밀 관리자로 권한 부여 합니다.

resourceGroupID=$(az identity show -g Backend-Test_KoreaCentral \
                   --name azurekeyvaultsecretsprovider-Backend-Test \
                   --query principalId -o tsv)
    
az role assignment create --assignee-object-id $resourceGroupID \
   --role "Key Vault Administrator"  --scope /subscriptions/$sub/resourceGroups/$storageRG/providers/Microsoft.KeyVault/vaults/$KV

 

SecretProviderClass에서 사용할 userAssignedIdentityID를 가져옵니다

az aks show -g $k8sRG -n $CLUSTER \
    --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv

 

SecretProviderClass를 생성 합니다.

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: azure-kvname-system-msi
spec:
  provider: azure
  secretObjects:
  - secretName: password
    type: Opaque
    data:
    - objectName: "password1"
      key: password
  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "true"    
    userAssignedIdentityID: "{id}"     
    keyvaultName: aks
    cloudName: "AzurePublicCloud"                   
    objects:  |
      array:
        - |
          objectName: password1
          objectType: secret        
          objectVersion: ""        
    tenantId: xxxxxxxxxxxxxxxxxxxxxxxxx
    resourceGroup: "storage"  
    subscriptionId: "{sub}"

 

[sample] Deployment를 생성 합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: secretpods
  name: secretpods
spec:
  replicas: 1
  selector:
    matchLabels:
      app: secretpods
  template:
    metadata:
      labels:
        app: secretpods
    spec:
      containers:
      - image: ubuntu:latest
        name: ubuntu
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "while true; do sleep 30; done;" ]
        env:
        - name: password
          valueFrom:
            secretKeyRef:
              name: password
              key: password1
        volumeMounts:
          - name:  secret-store
            mountPath:  "mnt/secret-store"
            readOnly: true
      volumes:
        - name:  secret-store
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "azure-kvname-system-msi"

 

결과 확인

 

'DevOps' 카테고리의 다른 글

ansible  (0) 2023.10.20
Prometheus (Windows exporter)  (0) 2023.10.20
Packer  (0) 2023.10.17
blackbox exporter 배포 및 alertmanager slack 설정  (0) 2022.11.06
Istio - 3(설치 및 예제)  (0) 2021.12.05