다음을 통해 공유


Azure Arc 지원 Kubernetes에서 워크로드 ID 페더레이션 배포 및 구성(미리 보기)

Azure CLI를 사용하여 Azure Arc 지원 Kubernetes 클러스터에서 워크로드 ID 기능을 사용하도록 설정할 수 있습니다. 이 프로세스는 다음과 같은 개략적인 단계를 수행합니다.

  1. 신규 또는 기존 Arc 지원 Kubernetes 클러스터에서 워크로드 ID 기능을 사용하도록 설정합니다.
  2. 관리 ID(또는 앱 등록) 및 Kubernetes 서비스 계정을 만듭니다.
  3. 토큰 페더레이션을 위한 관리 ID를 구성합니다.
  4. 워크로드 ID를 사용하도록 서비스 계정 주석 및 애플리케이션 Pod 레이블을 구성합니다.
  5. Kubernetes 클러스터에서 워크로드 ID 설정을 구성합니다.
  6. 클러스터에서 워크로드 ID를 사용하지 않도록 설정합니다.

이 기능에 대한 개요는 Azure Arc 지원 Kubernetes(미리 보기)의 워크로드 ID 페더레이션을 참조하세요.

Important

Azure Arc 워크로드 ID 페더레이션 기능은 현재 미리 보기로 제공됩니다. 베타, 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.

이 문서에서는 Arc 지원 Kubernetes 클러스터에서 워크로드 ID를 배포하고 구성하는 데 필요한 단계를 설명합니다. 다른 유형의 클러스터에서 워크로드 ID를 사용하도록 설정하는 방법을 알아보려면 다음 문서를 참조하세요.

필수 조건

  • Azure Arc 지원 Kubernetes 클러스터(미리 보기)에 대한 워크로드 ID는 다음 Kubernetes 배포에서 지원됩니다.
    • K3s를 실행하는 Ubuntu Linux 클러스터
    • AKS on Edge Essentials
    • HCI 23H2의 AKS

워크로드 ID 기능을 사용하려면 Azure CLI 버전 2.64 이상 및 az connectedk8s 버전 1.10.0 이상이 있어야 합니다. 버전을 업데이트하기 전에 Azure CLI 버전을 업데이트해야 합니다 az connectedk8s . Azure Cloud Shell을 사용하는 경우 최신 버전의 Azure CLI가 설치됩니다.

클러스터에서 워크로드 ID 사용

적절한 단계에 따라 새 Arc 지원 Kubernetes 클러스터 또는 기존 클러스터에 워크로드 ID 기능을 사용하도록 설정합니다. 두 경우 모두 이름 및 리소스 그룹을 값으로 바꾸고 원하는 대로 매개 변수를 구성해야 합니다.

매개 변수 설명 필수
--enable-oidc-issuer API 서버가 토큰을 확인하기 위한 공개 서명 키를 찾을 수 있도록 하는 공개적으로 액세스할 수 있는 URL인 OIDC 발급자 URL을 생성하고 호스트합니다.  Required
--enable-workload-identity 서명된 서비스 계정 토큰을 잘 알려진 경로에 프로젝션하고 주석이 추가된 서비스 계정의 설정에 따라 애플리케이션 Pod에 인증 관련 환경 변수를 삽입하는 변경 허용 웹후크를 설치합니다. 새 클러스터의 경우 이 매개 변수를 사용하도록 설정하지 않은 경우 서명된 서비스 계정 토큰을 경로에 노출하는 잘 알려진 경로에 프로젝션된 볼륨을 탑재해야 합니다. 선택 사항

환경 변수 설정

편의를 위해 아래에 정의된 환경 변수는 이 문서의 예제에서 참조됩니다. 이러한 값을 사용자 고유의 값으로 대체합니다.

export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"

워크로드 ID를 사용하도록 설정된 Azure Arc 지원 클러스터를 만들려면 다음 명령을 사용합니다.

az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity

기존 Arc 지원 Kubernetes 클러스터에서 워크로드 ID를 사용하도록 설정하려면 이 update 명령을 사용합니다.

az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity

OIDC 발급자 URL 검색

OIDC 발급자 URL을 가져와 환경 변수에 저장합니다. 이 발급자 URL은 다음 단계에서 사용됩니다.

export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \ 
    --query "oidcIssuerProfile.issuerUrl" \  
    --output tsv)"

환경 변수를 보려면 .를 입력합니다 echo ${OIDC_ISSUER}. 환경 변수에는 다음 예와 유사한 발급자 URL이 포함되어야 합니다.

https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/

기본적으로 발급자에서 기본 URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}을 사용하도록 설정됩니다. 여기서 값 {region} 은 Arc 지원 Kubernetes 클러스터가 만들어진 위치와 일치합니다. 값 {uuid} 은 각 클러스터에 대해 변경할 수 없는 임의로 생성된 Guid인 OIDC(OpenID Connect) 키를 나타냅니다.

관리 ID 만들기

az identity create 명령을 사용하여 사용자가 할당한 관리 ID를 만듭니다. 워크로드 ID를 사용하면 사용자 할당 관리 ID의 토큰과 Kubernetes 클러스터의 서비스 계정 토큰 간에 트러스트 관계가 설정됩니다.

az identity create \ 
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --subscription "${SUBSCRIPTION}"

관리 ID의 클라이언트 ID를 가져오고 환경 변수에 저장합니다.

export USER_ASSIGNED_CLIENT_ID="$(az identity show \ 
    --resource-group "${RESOURCE_GROUP}" \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --query 'clientId' \
    --output tsv)"

Kubernetes 서비스 계정 만들기

Kubernetes 서비스 계정을 만들고 이전 단계에서 만든 관리 ID의 클라이언트 ID로 주석을 답니다. Kubernetes 서비스 계정과 연결된 서명된 토큰은 둘 사이에 트러스트 관계가 설정된 후 Microsoft Entra ID 토큰으로 교환됩니다.

다음 YAML 코드 조각을 적용하여 워크로드 ID 주석이 추가된 서비스 계정을 만듭니다.

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  annotations: 
    azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}" 
  name: "${SERVICE_ACCOUNT_NAME}" 
  namespace: "${SERVICE_ACCOUNT_NAMESPACE}" 

페더레이션된 ID 자격 증명 만들기

az identity federated-credential create 명령을 사용하여 관리 ID, 서비스 계정 발급자 및 주체 간에 페더레이션 ID 자격 증명을 만듭니다. 이 단계에서는 토큰을 교환하기 위해 Kubernetes 클러스터와 Microsoft Entra 간에 트러스트 관계를 설정합니다. Microsoft Entra의 페더레이션된 ID 자격 증명에 대한 자세한 내용은 Microsoft Entra ID의 페더레이션된 ID 자격 증명 개요를 참조하세요.

az identity federated-credential create \ 
    --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \ 
    --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ 
    --resource-group "${RESOURCE_GROUP}" \ 
    --issuer "${OIDC_ISSUER}" \ 
    --subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \ 
    --audience api://AzureADTokenExchange 

참고 항목

연방 ID 자격 증명이 추가된 후 전파하는 데 몇 초 정도 걸립니다. 페더레이션된 ID 자격 증명을 추가한 직후 토큰 요청이 이루어지면 캐시가 새로 고쳐질 때까지 요청이 실패할 수 있습니다. 이 문제를 방지하려면 페더레이션 ID 자격 증명을 추가한 후 스크립트에 약간의 지연을 추가합니다.

서비스 계정 주석 및 Pod 레이블 구성

다음 서비스 계정 및 Pod 주석은 애플리케이션 요구 사항에 따라 워크로드 ID를 구성하는 데 사용할 수 있습니다. 아래에 지정된 Pod 레이블은 .로 설정된 true경우 –-enable-workload-identity 필수입니다.

서비스 계정 주석

모든 서비스 계정 주석은 선택 사항입니다. 주석을 지정하지 않으면 기본값이 사용됩니다.

주석 설명 기본값
azure.workload.identity/client-id Pod와 함께 사용할 Microsoft Entra 애플리케이션 클라이언트 ID입니다.
azure.workload.identity/tenant-id Microsoft Entra 애플리케이션이 등록된 Azure 테넌트 ID입니다. AZURE_TENANT_ID ConfigMap에서 azure-wi-webhook-config 추출된 환경 변수입니다.
azure.workload.identity/service-account-token-expiration expirationSeconds 프로젝트된 서비스 계정 토큰에 대한 필드입니다. 서비스 계정 토큰을 새로 고치는 동안 오류로 인한 가동 중지 시간을 방지하도록 구성합니다. Kubernetes 서비스 계정 토큰 만료는 Microsoft Entra 토큰과 관련이 없습니다. Microsoft Entra 토큰은 발급된 후 24시간 후에 만료됩니다. 3600(지원되는 범위는 3600-86400)

Pod 레이블

주석 설명 권장 값 Required
azure.workload.identity/use Pod 템플릿 사양에 필요합니다. –-enable-workload-identity 이 레이블이 true있는 Pod만 변경 허용 웹후크에 의해 변경되어 Azure 특정 환경 변수 및 예상 서비스 계정 토큰 볼륨을 삽입합니다. true

Pod 주석

모든 Pod 주석은 선택 사항입니다. 주석을 지정하지 않으면 기본값이 사용됩니다.

주석 설명 기본값
azure.workload.identity/service-account-token-expiration expirationSeconds 프로젝트된 서비스 계정 토큰에 대한 필드입니다. 서비스 계정 토큰을 새로 고치는 동안 오류로 인한 가동 중지 시간을 방지하도록 구성합니다. Kubernetes 서비스 계정 토큰 만료는 Microsoft Entra 토큰과 관련이 없습니다. Microsoft Entra 토큰은 발급된 후 24시간 후에 만료됩니다. 3600(지원되는 범위는 3600-86400)
azure.workload.identity/skip-containers 프로젝션된 서비스 계정 볼륨 추가를 건너뛸 세미콜론으로 구분된 컨테이너 목록을 나타냅니다. 예: container1;container2 기본적으로 Pod에 레이블이 지정된 경우 프로젝트된 서비스 계정 토큰 볼륨이 모든 컨테이너에 추가됩니다 azure.workload.identity/use: true.

Kubernetes 클러스터에서 워크로드 ID 설정 구성

공개적으로 액세스할 수 있는 OIDC 발급자 URL을 포함하는 서비스 계정 토큰을 발급하도록 Kubernetes 클러스터의 API 서버를 구성해야 합니다(엔트로가 토큰의 유효성을 검사하기 위해 공개 키를 찾을 위치를 알 수 있도록).

K3s를 사용하여 Ubuntu Linux에서 워크로드 ID 설정을 구성하려면 다음 단계에 따라 구성을 완료합니다.

  1. k3s 구성 파일을 만듭니다.

  2. 다음 설정을 추가하려면 편집 /etc/rancher/k3s/config.yaml 합니다.

       `kube-apiserver-arg:  
         - 'service-account-issuer=${OIDC_ISSUER}'
         - 'service-account-max-token-expiration=24h'`
    
  3. config.yaml을 저장합니다.

  4. 명령을 사용하여 k3s API 서버를 다시 시작 systemctl restart k3s합니다.

    서비스 계정 키를 자주 회전하는 것이 좋습니다. 자세한 내용은 서비스 계정 발급자 키 회전을 참조 하세요.

워크로드 ID 사용 중지

Azure Arc 지원 Kubernetes 클러스터에서 워크로드 ID 기능을 사용하지 않도록 설정하려면 다음 명령을 실행합니다.

az connectedk8s update
    --resource-group "${RESOURCE_GROUP}"
    --name "${CLUSTER_NAME}"
    --disable-workload-identity

다음 단계