다음을 통해 공유


AKS(Azure Kubernetes Service)에서 OpenID Connect 공급자 만들기

OIDC(OpenID Connect)는 OAuth 2.0 인증 프로토콜을 Microsoft Entra ID에서 발급한 다른 인증 프로토콜로 사용할 수 있도록 확장합니다. OIDC를 사용하면 AKS(Azure Kubernetes Service) 클러스터에서 ID 토큰이라는 보안 토큰을 이용하여 OAuth 지원 애플리케이션 간에 SSO(Single Sign-On)를 사용할 수 있습니다. AKS 클러스터를 사용하면 Microsoft Entra ID 또는 다른 클라우드 공급자의 ID 및 액세스 관리 플랫폼에서 API 서버의 공개 서명 키를 검색할 수 있는 OIDC(OpenID Connect) 발급자를 사용할 수 있습니다.

AKS는 키를 주기적으로 자동 회전합니다. 기다리고 싶지 않다면 즉시 수동으로 키를 회전하면 됩니다. OIDC 공급자가 발급한 토큰의 최대 수명은 1일입니다.

Warning

기존 클러스터에서 OIDC 발급자를 사용하도록 설정하면 현재 서비스 계정 토큰 발급자가 새 값으로 변경되므로 API 서버를 다시 시작할 때 가동 중지 시간이 발생할 수 있습니다. OIDC 발급자를 사용한 후에도 서비스 토큰을 이용하는 애플리케이션 Pod가 실패 상태로 남아 있으면 Pod를 수동으로 다시 시작하는 것이 좋습니다.

이 문서에서는 클러스터에서 OIDC 발급자를 만들고 업데이트하며 관리하는 방법을 알아봅니다.

Important

클러스터에서 OIDC 발급자를 사용하도록 설정한 후에는 사용하지 않도록 설정할 수 없습니다.

토큰을 주기적으로 새로 고쳐야 합니다. SDK를 사용하는 경우 회전이 자동으로 수행됩니다. 그렇지 않으면 24시간마다 토큰을 수동으로 새로 고쳐야 합니다.

필수 조건

  • Azure CLI 버전 2.42.0 이상. az --version를 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • AKS는 버전 1.22 이상에서 OIDC 발급자를 지원합니다.

OIDC 발급자를 사용하여 AKS 클러스터 만들기

--enable-oidc-issuer 매개 변수와 함께 az aks create 명령을 사용하여 AKS 클러스터를 만들어 OIDC 발급자를 사용하도록 설정할 수 있습니다. 다음 예에서는 myResourceGroup에 하나의 노드가 있는 myAKSCluster라는 클러스터를 만듭니다.

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --enable-oidc-issuer \
    --generate-ssh-keys

OIDC 발급자를 사용하여 AKS 클러스터 업데이트

--enable-oidc-issuer 매개 변수와 함께 az aks update 명령을 사용하여 AKS 클러스터를 업데이트하여 OIDC 발급자를 사용하도록 설정할 수 있습니다. 다음 예에서는 myAKSCluster라는 클러스터를 업데이트합니다.

az aks update --resource-group myResourceGroup --name myAKSCluster --enable-oidc-issuer 

OIDC 발급자 URL 표시

OIDC 발급자 URL을 가져오려면 az aks show 명령을 실행합니다. 클러스터 이름 및 리소스 그룹 이름의 기본값을 바꿉니다.

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

기본적으로 발급자는 기준 URL https://{region}.oic.prod-aks.azure.com을 사용하도록 설정됩니다. 여기서 {region}의 값은 AKS 클러스터가 배포된 위치와 일치합니다.

OIDC 키 회전

OIDC 키를 회전하려면 az aks oidc-issuer 명령을 실행합니다. 클러스터 이름 및 리소스 그룹 이름의 기본값을 바꿉니다.

az aks oidc-issuer rotate-signing-keys --name myAKSCluster --resource-group myResourceGroup

Important

키를 회전하면 이전 키(key1)는 24시간 후에 만료됩니다. 이전 키(key1)와 새 키(key2)는 모두 회전 후 24시간 이내에 유효합니다. 이전 키(key1)를 즉시 무효화하려면 OIDC 키를 두 번 회전하고 프로젝션된 서비스 계정 토큰을 사용하여 Pod를 다시 시작해야 합니다. 이 프로세스를 통해 key2와 key3은 유효하고 key1은 유효하지 않습니다.

OIDC 키 확인

OIDC 발급자 URL 가져오기

OIDC 발급자 URL을 가져오려면 az aks show 명령을 실행합니다. 클러스터 이름 및 리소스 그룹 이름의 기본값을 바꿉니다.

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

출력은 다음과 유사합니다.

https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/

기본적으로 발급자는 기준 URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}를 사용하도록 설정됩니다. 여기서 {region}의 값은 AKS 클러스터가 배포된 위치와 일치합니다. 이 {uuid} 값은 변경이 불가능한 각 클러스터에 임의로 생성된 guid인 OIDC 키를 나타냅니다.

검색 문서 가져오기

검색 문서를 가져오려면 URL(https://(OIDC issuer URL).well-known/openid-configuration)을 복사하여 브라우저에서 엽니다.

출력은 다음과 유사합니다.

{
  "issuer": "https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/",
  "jwks_uri": "https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks",
  "response_types_supported": [
    "id_token"
  ],
  "subject_types_supported": [
    "public"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ]
}

JWK 세트 문서 가져오기

JWK 세트 문서를 가져오려면 검색 문서에서 jwks_uri를 복사하여 브라우저의 주소 표시줄에 붙여넣습니다.

출력은 다음과 유사합니다.

{
  "keys": [
    {
      "use": "sig",
      "kty": "RSA",
      "kid": "xxx",
      "alg": "RS256",
      "n": "xxxx",
      "e": "AQAB"
    },
    {
      "use": "sig",
      "kty": "RSA",
      "kid": "xxx",
      "alg": "RS256",
      "n": "xxxx",
      "e": "AQAB"
    }
  ]
}

키 회전 중에는 검색 문서에 다른 키가 하나 더 있습니다.

다음 단계

  • 페더레이션 ID 자격 증명으로 클러스터의 애플리케이션과 외부 ID 공급자 간에 트러스트 관계를 만드는 방법을 이해하려면 앱과 외부 ID 공급자 간에 트러스트 관계 만들기 구성을 참조하세요.
  • Microsoft Entra 워크로드 ID(미리 보기)를 검토하세요. 이 인증 방법은 Kubernetes 네이티브 기능과 통합되어 애플리케이션 대신 외부 ID 공급자와 페더레이션합니다.
  • 네트워크 정책 엔진을 사용하고 Kubernetes 네트워크 정책을 만들어 AKS에서 Pod 간의 트래픽 흐름을 제어하는 방법을 이해하려면 Pod 네트워크 트래픽 보호를 참조하세요.