Batch 풀에서 자동 인증서 순환 사용

자동으로 갱신할 수 있는 인증서를 사용하여 Batch 풀을 만들 수 있습니다. 이렇게 하려면 Azure Key Vault의 인증서에 액세스할 수 있는 사용자 할당 관리 ID를 사용하여 풀을 만들어야 합니다.

사용자 할당 ID 만들기

먼저 배치 계정과 동일한 테넌트에서 사용자가 할당한 관리 ID 만들기를 수행합니다. 이 관리 ID는 동일한 리소스 그룹 또는 동일한 구독에 있을 필요는 없습니다.

사용자가 할당한 관리 ID의 클라이언트 ID를 확인해야 합니다. 이 값은 나중에 필요합니다.

Azure Portal에서 사용자가 할당한 관리 ID의 클라이언트 ID를 보여 주는 스크린샷.

인증서 만들기

다음으로 인증서를 만들어 Azure Key Vault에 추가해야 합니다. 키 자격 증명 모음을 아직 만들지 않은 경우 먼저 키 자격 증명 모음을 만들어야 합니다. 지침은 빠른 시작: Azure Portal을 사용하여 Azure Key Vault에서 인증서 설정 및 검색을 참조하세요.

인증서를 만들 때 수명 작업 유형을 자동 갱신으로 설정하고 인증서를 갱신해야 하는 기간(일)을 지정해야 합니다.

Azure Portal 인증서 만들기 화면의 스크린샷.

인증서를 만든 후에는 비밀 식별자를 기록해 둡니다. 이 값은 나중에 필요합니다.

인증서의 비밀 식별자를 보여 주는 스크린샷.

Azure Key Vault에서 액세스 정책 추가

키 자격 증명 모음에서 사용자가 할당한 관리 ID가 비밀 및 인증서에 액세스할 수 있게 하는 Key Vault 액세스 정책을 할당합니다. 자세한 지침은 Azure Portal을 사용하여 Key Vault 액세스 정책 할당을 참조하세요.

사용자가 할당한 관리 ID를 사용하여 Batch 풀 만들기

Batch .NET 관리 라이브러리를 사용하여 관리 ID로 Batch 풀을 만듭니다. 자세한 내용은 Batch 풀의 관리 ID 구성을 참조하세요.

기존 풀은 Key Vault VM 확장으로 업데이트할 수 없습니다. 풀을 다시 만들어야 합니다.

다음 예제에서는 Batch 관리 REST API를 사용하여 풀을 만듭니다. observedCertificates에는 인증서의 비밀 식별자를 사용하고 msiClientId에는 관리 ID의 클라이언트 ID를 사용하여 아래 예제 데이터를 바꾸어야 합니다.

REST API URI

PUT https://management.azure.com/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2021-01-01

Linux 노드에 대한 요청 본문

{
  "name": "test2",
  "type": "Microsoft.Batch/batchAccounts/pools",
  "properties": {
    "vmSize": "STANDARD_DS2_V2",
    "taskSchedulingPolicy": {
      "nodeFillType": "Pack"
    },
    "deploymentConfiguration": {
      "virtualMachineConfiguration": {
        "imageReference": {
          "publisher": "canonical",
          "offer": "ubuntuserver",
          "sku": "20.04-lts",
          "version": "latest"
        },
        "nodeAgentSkuId": "batch.node.ubuntu 20.04",
        "extensions": [
          {
            "name": "KVExtensions",
            "type": "KeyVaultForLinux",
            "publisher": "Microsoft.Azure.KeyVault",
            "typeHandlerVersion": "3.0",
            "autoUpgradeMinorVersion": true,
            "settings": {
              "secretsManagementSettings": {
                "pollingIntervalInS": "300",
                "certificateStoreLocation": "/var/lib/waagent/Microsoft.Azure.KeyVault",
                "requireInitialSync": true,
                "observedCertificates": [
                  "https://testkvwestus2s.vault.azure.net/secrets/authcertforumatesting/8f5f3f491afd48cb99286ba2aacd39af"
                ]
              },
              "authenticationSettings": {
                "msiEndpoint": "http://169.254.169.254/metadata/identity",
                "msiClientId": "b9f6dd56-d2d6-4967-99d7-8062d56fd84c"
              }
            }
          }
        ]
      }
    },
    "scaleSettings": {
      "fixedScale": {
        "targetDedicatedNodes": 1,
        "resizeTimeout": "PT15M"
      }
    }
  },
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/042998e4-36dc-4b7d-8ce3-a7a2c4877d33/resourceGroups/ACR/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testumaforpools": {}
    }
  }
}

Windows 노드에 대한 요청 본문

{
    "name": "test2",
    "type": "Microsoft.Batch/batchAccounts/pools",
    "properties": {
        "vmSize": "STANDARD_DS2_V2",
        "taskSchedulingPolicy": {
            "nodeFillType": "Pack"
        },
        "deploymentConfiguration": {
            "virtualMachineConfiguration": {
                "imageReference": {
                    "publisher": "microsoftwindowsserver",
                    "offer": "windowsserver",
                    "sku": "2022-datacenter",
                    "version": "latest"
                },
                "nodeAgentSkuId": "batch.node.windows amd64",
                "extensions": [
                    {
                        "name": "KVExtensions",
                        "type": "KeyVaultForWindows",
                        "publisher": "Microsoft.Azure.KeyVault",
                        "typeHandlerVersion": "3.0",
                        "autoUpgradeMinorVersion": true,
                        "settings": {
                            "secretsManagementSettings": {
                                "pollingIntervalInS": "300",
                                "requireInitialSync": true,
                                "observedCertificates": [
                                    {
                                        "url": "https://testkvwestus2s.vault.azure.net/secrets/authcertforumatesting/8f5f3f491afd48cb99286ba2aacd39af",
                                        "certificateStoreLocation": "LocalMachine",
                                        "keyExportable": true
                                    }
                                ]
                            },
                            "authenticationSettings": {
                                "msiEndpoint": "http://169.254.169.254/metadata/identity",
                                "msiClientId": "b9f6dd56-d2d6-4967-99d7-8062d56fd84c"
                            }
                        },
                    }
               ]
            }
        },
        "scaleSettings": {
            "fixedScale": {
                "targetDedicatedNodes": 1,
                "resizeTimeout": "PT15M"
            }
        },
    },
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "/subscriptions/042998e4-36dc-4b7d-8ce3-a7a2c4877d33/resourceGroups/ACR/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testumaforpools": {}
        }
    }
}

인증서 유효성을 검사합니다.

인증서가 성공적으로 배포되었는지 확인하려면 컴퓨팅 노드에 로그인합니다. 다음과 비슷한 결과가 나타나야 합니다.

root@74773db5fe1b42ab9a4b6cf679d929da000000:/var/lib/waagent/Microsoft.Azure.KeyVault.KeyVaultForLinux-1.0.1363.13/status# cat 1.status
[{"status":{"code":0,"formattedMessage":{"lang":"en","message":"Successfully started Key Vault extension service. 2021-03-03T23:12:23Z"},"operation":"Service start.","status":"success"},"timestampUTC":"2021-03-03T23:12:23Z","version":"1.0"}]root@74773db5fe1b42ab9a4b6cf679d929da000000:/var/lib/waagent/Microsoft.Azure.KeyVault.KeyVaultForLinux-1.0.1363.13/status#

Key Vault 확장 문제 해결

Key Vault 확장이 잘못 구성된 경우 컴퓨팅 노드가 사용 가능한 상태일 수 있습니다. Key Vault 확장 오류를 해결하려면 일시적으로 requireInitialSync를 false로 설정하고 풀을 다시 배포한 다음 컴퓨팅 노드가 유휴 상태가 되고 컴퓨팅 노드에 로그인하여 KeyVault 확장 로그에서 오류를 확인하고 구성 문제를 해결할 수 있습니다. 자세한 내용을 보려면 다음 Key Vault 확장 문서 링크를 참조하세요.

다음 단계