다음을 통해 공유


인증서 기반 인증에 Azure 서비스 주체 사용

서비스 주체를 만들 때 사용하는 로그인 인증 유형을 선택합니다. Azure 서비스 주체에 사용할 수 있는 인증 유형에는 암호 기반 인증 및 인증서 기반 인증의 두 가지 유형이 있습니다.

암호 기반 인증의 보안 제한으로 인해 인증서 기반 인증을 사용하는 것이 좋습니다. 인증서 기반 인증을 사용하면 Azure 리소스를 더 잘 보호하는 조건부 액세스 정책을 사용하여 피싱 방지 인증을 채택할 수 있습니다. 인증서 기반 인증이 더 안전한 이유에 대한 자세한 내용은 Microsoft Entra 인증서 기반 인증을 참조하세요.

자습서의 이 단계에서는 서비스 주체 인증서를 사용하여 Azure 리소스에 액세스하는 방법을 설명합니다.

새 인증서를 포함하는 서비스 주체 만들기

인증을 위해 자체 서명된 인증서를 만들려면 --create-cert 매개 변수를 사용합니다.

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert

콘솔 출력:

{
  "appId": "myServicePrincipalID",
  "displayName": "myServicePrincipalName",
  "fileWithCertAndPrivateKey": "certFilePath\certFileName.pem",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

인증서를 Key Vault에 저장하지 않으면 출력에 fileWithCertAndPrivateKey 키가 포함됩니다. 이 키의 값은 생성된 인증서가 저장되는 위치를 알려줍니다. 인증서를 안전한 위치에 복사합니다. 인증서의 프라이빗 키에 액세스할 수 없는 경우 서비스 주체 자격 증명을 다시 설정하세요.

PEM 파일의 내용은 텍스트 편집기를 사용하여 볼 수 있습니다. PEM 파일 예제는 다음과 같습니다.

PEM 파일의 스크린샷

기존 인증서를 사용하여 서비스 주체 만들기

매개 변수를 사용하여 기존 인증서를 사용하여 서비스 주체를 만듭니다 --cert . 이 서비스 주체를 사용하는 모든 도구는 인증서의 프라이빗 키에 액세스할 수 있어야 합니다. 인증서는 PEM, CER 또는 DER과 같은 ASCII 형식이어야 합니다. certi897ficate를 문자열로 전달하거나 형식을 @path 사용하여 파일에서 인증서를 로드합니다.

PEM 파일을 사용하는 경우 인증서파일 내의 PRIVATE KEY추가해야 합니다.

# create a service principal with the certificate as a string
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
# create a service principal with the certificate file location
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert @/path/to/cert.pem

Azure Key Vault 작업

매개 변수를 --keyvault 추가하여 Azure Key Vault에서 인증서를 만들거나 검색할 수 있습니다. 매개 변수 --cert--keyvault 사용하는 경우 매개 변수도 필요합니다. 이 예제에서 --cert 값은 인증서의 이름입니다.

# Create a service principal storing the certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert \
                         --cert myCertificateName \
                         --keyvault myVaultName
# Create a service principal using an existing certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert myCertificateName \
                         --keyvault myVaultName

Azure Key Vault에서 인증서 검색

Azure Key Vault에 저장된 인증서의 경우 az keyvault secret show사용하여 프라이빗 키가 있는 인증서를 검색하고 PEM 파일로 변환합니다. Azure Key Vault에서 인증서 비밀의 이름은 인증서 이름과 동일합니다.

az keyvault secret download --file /path/to/cert.pfx \
                            --vault-name VaultName \
                            --name CertName \
                            --encoding base64
openssl pkcs12 -in cert.pfx -passin pass: -passout pass: -out cert.pem -nodes

az login --service-principal -u "<myAppClientID>" -p cert.pem --tenant "<myTenantID>"

기존 PKCS12 파일 변환

PKCS#12 파일이 이미 있는 경우 OpenSSL을 사용하여 PEM 형식으로 변환할 수 있습니다. 암호가 있는 경우 인수를 변경합니다 passin .

openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass: -passout pass:

서비스 주체에 인증서 추가

--append az ad sp credential reset매개 변수를 사용하여 기존 서비스 주체에 인증서를 추가합니다. 기본적으로 이 명령은 모든 암호와 키를 지우므로 신중하게 사용합니다.

az ad sp credential reset --id myServicePrincipalID \
                          --append \
                          --cert @/path/to/cert.pem

콘솔 출력:

Certificate expires yyyy-mm-dd hh:mm:ss+00:00. Adjusting key credential end date to match.
The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
{
  "appId": "myServicePrincipalID",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

인증서를 사용하여 서비스 주체로 로그인

인증서로 로그인하려면 인증서를 ASCII 형식의 PEM 또는 DER 파일로 로컬로 사용할 수 있어야 합니다. PKCS#12 파일(.p12/.pfx)은 작동하지 않습니다. PEM 파일을 사용하는 경우 PRIVATE KEYCERTIFICATE 를 파일 내에 함께 추가해야 합니다. 다른 az 명령과 @ 마찬가지로 경로 접두사를 지정할 필요가 없습니다.

az login --service-principal \
         --username myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

다음 단계

인증서를 사용하여 서비스 주체로 작업하는 방법을 알아보았으므로 다음 단계를 진행하여 기존 서비스 주체를 검색하는 방법을 알아봅니다.