다음을 통해 공유


JSON Web Token을 사용하여 네임스페이스로 인증

이 문서에서는 JSON Web Token을 사용하여 Azure Event Grid 네임스페이스로 인증하는 방법을 보여 줍니다.

Azure Event Grid의 MQTT 브로커는 사용자 지정 JWT 인증을 지원합니다. 이를 통해 클라이언트는 Microsoft Entra ID 외에 모든 ID 공급자가 발급한 JSON Web Token을 사용하여 Event Grid 네임스페이스에 연결하고 인증할 수 있습니다.

필수 조건

네임스페이스에 대한 사용자 지정 JWT 인증을 사용하려면 다음 필수 조건이 필요합니다.

  • Json 웹 토큰을 발급할 수 있는 ID 공급자입니다.
  • 클라이언트 토큰의 유효성을 검사하는 데 사용되는 공개 키가 포함된 CA 인증서입니다.
  • 공개 키가 포함된 CA 인증서를 호스팅하기 위한 Azure Key Vault 계정입니다.

대략적인 단계

네임스페이스에 사용자 지정 JWT 인증을 사용하려면 다음 단계를 따릅니다.

  1. 네임스페이스를 만들고 해당 하위 리소스를 구성합니다.
  2. Event Grid 네임스페이스에서 관리 ID를 사용하도록 설정합니다.
  3. 공개 키가 포함된 CA 인증서를 호스팅하는 Azure Key Vault 계정을 만듭니다.
  4. 네임스페이스의 관리 ID에 대해 Azure Key Vault에 역할 할당을 추가합니다.
  5. Event Grid 네임스페이스에서 사용자 지정 인증 설정 구성
  6. 클라이언트는 ID 공급자가 제공한 토큰을 사용하여 Event Grid 네임스페이스에 연결할 수 있습니다.

네임스페이스 만들기 및 해당 하위 리소스 구성

빠른 시작: Azure Portal을 사용하여 Event Grid 네임스페이스에서 MQTT 메시지 게시 및 구독의 지침에 따라 네임스페이스를 만들고 해당 하위 리소스를 구성합니다. 클라이언트 ID는 제공된 토큰에서 나오므로 인증서 및 클라이언트 만들기 단계를 건너뜁니다. 클라이언트 특성은 클라이언트 토큰의 사용자 지정 클레임을 기반으로 합니다. 클라이언트 특성은 클라이언트 그룹 쿼리, 항목 템플릿 변수 및 라우팅 보강 구성에 사용됩니다.

Event Grid 네임스페이스에서 관리 ID 사용

네임스페이스는 관리 ID를 사용하여 Azure Key Vault 인스턴스에 액세스하여 사용자 지정 도메인에 대한 서버 인증서를 가져옵니다. Event Grid 네임스페이스에서 시스템 할당 관리 ID를 사용하도록 설정하려면 다음 명령을 사용합니다.

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Azure Portal을 사용하여 시스템 및 사용자 할당 ID를 구성하는 방법에 대한 자세한 내용은 Event Grid 네임스페이스에 관리 ID 사용을 참조하세요.

Azure Key Vault 계정 만들기 및 서버 인증서 업로드

  1. 다음 명령을 사용하여 Azure Key Vault 계정을 만듭니다.

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. 다음 명령을 사용하여 인증서를 Azure Key Vault로 가져옵니다.

    az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> " 
    

    참고 항목

    인증서에는 DNS의 주체 대체 이름에 도메인 이름이 포함되어야 합니다. 자세한 내용은 자습서: Azure Key Vault에서 인증서 가져오기를 참조하세요.

네임스페이스의 관리 ID에 대해 Azure Key Vault에 역할 할당 추가

다음 단계에서 Azure Key Vault 계정에 액세스하려면 네임스페이스에 대한 액세스 권한을 제공해야 합니다.

  1. 다음 명령을 사용하여 Event Grid 네임스페이스 시스템 관리 ID 주체 ID를 가져옵니다.

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Azure Key Vault 리소스 ID를 가져옵니다.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. 네임스페이스의 관리 ID에 대해 Key Vault에 역할 할당을 추가합니다.

    az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId 
    

    Key Vault 액세스 및 포털 환경에 대한 자세한 내용은 Azure 역할 기반 액세스 제어를 사용하여 Key Vault 키, 인증서 및 비밀에 대한 액세스 제공을 참조하세요.

Event Grid 네임스페이스에서 사용자 지정 인증 설정 구성

이 단계에서는 Azure Portal 및 Azure CLI를 사용하여 Event Grid 네임스페이스에 대한 사용자 지정 인증 설정을 구성합니다. 먼저 네임스페이스를 만든 후 다음 단계에서 업데이트해야 합니다.

Azure Portal 사용

  1. Azure Portal에서 Event Grid 네임스페이스로 이동합니다.

  2. Event Grid 네임스페이스 페이지의 왼쪽 메뉴에서 구성을 선택합니다.

  3. 사용자 지정 JWT 인증 섹션에서 다음 속성의 값을 지정합니다.

    1. 사용자 지정 JWT 인증 사용을 선택합니다.

    2. 토큰 발급자: MQTT 클라이언트가 제공하는 JWT 토큰의 발급자 클레임 값을 입력합니다.

    3. 발급자 인증서 추가를 선택합니다.

      Event Grid 네임스페이스에 대한 구성 페이지의 사용자 지정 JWT 인증 섹션을 보여 주는 스크린샷.

    4. 새 페이지에서 다음 속성의 값을 지정합니다.

      1. 인증서 URL: 사용자가 만든 Azure Key Vault에 있는 발급자 인증서의 인증서 식별자입니다. 구독에서 인증서와 키 자격 증명 모음을 선택하는 대신 키 자격 증명 모음을 사용하여 인증서 선택을 선택할 수 있습니다.

      2. ID: 만들어진 발급자 인증서에 액세스하기 위해 Key Vault로 인증하는 데 사용되는 ID입니다.

      3. 추가를 선택합니다.

        발급자 인증서 추가 페이지를 보여 주는 스크린샷.

  4. 구성 페이지로 돌아가서 적용을 선택합니다.

    참고 항목

    인증서/키 회전 목적으로 최대 2개의 iss 인증서를 추가할 수 있습니다.

Azure CLI 사용

사용자 지정 JWT 인증 구성으로 네임스페이스를 업데이트하려면 다음 명령을 사용합니다.

az resource update --resource-type Microsoft.EventGrid/namespaces --api-version 2024-06-01-preview --ids /subscriptions/69f9e5ac-ca07-42cc-98d2-4718d033bcc5/resourceGroups/dummy-cd-test/providers/Microsoft.EventGrid/namespaces/dummy-cd-test2 --set properties.topicSpacesConfiguration.clientAuthentication='{\"customJwtAuthentication\":{\"tokenIssuer\":\"dmpypin-issuer\",\"issuerCertificates\":[{\"certificateUrl\":\"https://dummyCert-cd-test.vault.azure.net/certificates/dummy-cd-test/4f844b284afd487e9bba0831191087br1\",\"identity\":{\"type\":\"SystemAssigned\"}}]}}' 

JSON Web Token 형식

Json Web Token은 JWT 헤더와 JWT 페이로드 섹션으로 구분됩니다.

JWT 헤더

헤더에는 최소한 typalg 필드가 포함되어야 합니다. typ는 항상 JWS여야 하고 alg는 항상 RS256이어야 합니다. 토큰 헤더는 다음과 같아야 합니다.

{
    "typ": "JWT",
    "alg": "RS256"
}

JWT 페이로드

Event Grid에는 iss, sub, aud, exp, nbf 클레임이 필요합니다.

속성 설명
iss 발급자. JWT의 값은 사용자 지정 JWT 인증을 위한 Event Grid 네임스페이스 구성의 발급자와 일치해야 합니다.
sub 주제. 값은 인증 ID 이름으로 사용됩니다.
aud 대상. 값은 문자열이거나 문자열 배열일 수 있습니다. 값에는 해당 Event Grid 네임스페이스에 대한 표준 Event Grid 네임스페이스 호스트 이름 및/또는 사용자 지정 도메인(구성된 경우)이 포함되어야 합니다. 대상 그룹에는 다른 문자열이 포함될 수 있지만 이러한 문자열 중 하나 이상이 이 네임스페이스에 대한 표준 Event Grid 네임스페이스 호스트 이름 또는 사용자 지정 도메인이어야 합니다.
exp 만료. JWT가 만료되는 Unix 시간입니다.
nbf 이전 시간이 아닙니다. JWT가 유효해지는 단위 시간입니다.

Event Grid는 int32, string, array of strings 형식 중 하나가 있는 경우 모든 클레임을 클라이언트 특성에 매핑합니다. 표준 클레임 iss, sub, aud, exp, nbf는 클라이언트 특성에서 제외됩니다. 다음 JWT 예에서는 올바른 형식 int32, string, array of strings가 있기 때문에 세 개의 클레임만 클라이언트 특성 num_attr, str_attr, str_list_attr로 변환됩니다. incorrect_attr_1, incorrect_attr_2, incorrect_attr_3은 잘못된 형식(float, array of integers, object)을 갖고 있기 때문에 클라이언트 특성으로 변환되지 않습니다.

{
    "iss": "correct_issuer",
    "sub": "d1",
    "aud": "testns.mqtt-broker-int.azure.net",
    "exp": 1712876224,
    "nbf": 1712869024,
    "num_attr": 1,
    "str_attr": "some string",
    "str_list_attr": [
        "string 1",
        "string 2"
    ],
    "incorrect_attr_1": 1.23,
    "incorrect_attr_2": [
        1,
        2,
        3
    ],
    "incorrect_attr_3": {
        "field": "value"
    }
}