Azure Container Apps에서 시크릿 관리

Azure Container Apps 애플리케이션에서 중요한 구성 값을 안전하게 저장할 수 있습니다. 애플리케이션 수준에서 비밀이 정의되면 Container Apps의 수정 버전에 보안 값을 사용할 수 있습니다. 또한 크기 조정 규칙 내에서 보안 값을 참조할 수 있습니다. Dapr에서 비밀을 사용하는 방법은 Dapr 통합을 참조하세요.

  • 비밀은 애플리케이션의 특정 버전에 국한되지 않고 애플리케이션 전체에 적용됩니다.
  • 새 수정 버전은 비밀을 추가, 제거 또는 변경하여 생성되지 않습니다.
  • 각 애플리케이션 수정 버전에서는 하나 이상의 비밀을 참조할 수 있습니다.
  • 여러 수정 버전에서 동일한 비밀을 참조할 수 있습니다.

업데이트되거나 삭제된 비밀은 앱의 기존 수정 버전에 자동으로 영향을 주지 않습니다. 비밀이 업데이트되거나 삭제되면 다음 두 가지 방법 중 하나로 변경 내용에 응답할 수 있습니다.

  1. 새 수정 버전을 배포합니다.
  2. 기존 수정 버전을 다시 시작합니다.

비밀을 삭제하기 전에 이전 비밀을 더 이상 참조하지 않는 새 수정 버전을 배포합니다. 그런 다음, 비밀을 참조하는 모든 수정 버전을 비활성화합니다.

비밀 관리 권한

Azure Container Apps는 컨테이너 앱, 작업 및 Dapr 구성 요소에 대해 별도의 listSecrets 작업을 제공합니다. 이 연산들은 비밀 값을 평문으로 반환합니다. 이 권한은 비밀 값을 읽어야 하는 아이덴티티에게만 부여하세요.

컨테이너 앱용 여러 Azure 내장 역할은 편의를 위해 와일드카드 패턴을 사용해 권한을 정의합니다. 다음 예시들은 역할명이나 설명이 더 좁은 접근을 암시하더라도 와일드카드나 명시적 listSecrets 권한을 통해 비밀 값을 읽을 수 있는 능력을 부여합니다. 이 목록이 전부는 아닙니다; 역할을 할당하기 전에 현재 Azure 내장 컨테이너 역할을 검토하세요.

다음 역할들은 컨테이너 앱 또는 작업 비밀 값에 대한 접근 권한을 부여합니다:

기본 제공 역할 역할 정의에 포함된 관련 권한이 있습니다 매칭 시크릿 연산
Container Apps 기여자 Microsoft.App/containerApps/*/action Microsoft.App/containerApps/listSecrets/action
Container Apps 운영자 Microsoft.App/containerApps/*/action Microsoft.App/containerApps/listSecrets/action
Container Apps 작업 기여자 Microsoft.App/jobs/*/action Microsoft.App/jobs/listSecrets/action
Container Apps 작업 운영자 Microsoft.App/jobs/*/action Microsoft.App/jobs/listSecrets/action

다음 역할들은 Dapr 컴포넌트에 설정된 비밀 값에 대한 접근 권한을 부여합니다:

기본 제공 역할 역할 정의에 포함된 관련 권한이 있습니다 비밀 일치 연산
Container Apps ManagedEnvironments 기여자 Microsoft.App/managedEnvironments/*/action Microsoft.App/managedEnvironments/daprComponents/listSecrets/action
Container Apps ConnectedEnvironments 기여자 Microsoft.App/connectedEnvironments/*, Microsoft.App/connectedEnvironments/daprComponents/listSecrets/action Microsoft.App/connectedEnvironments/daprComponents/listSecrets/action

실질적 접근은 역할 할당 범위에 따라 다릅니다. 예를 들어, 리소스 그룹 범위에서의 할당은 해당 리소스 그룹 내 모든 적용 가능한 자원에 대해 매칭 권한을 부여합니다.

Important

컨테이너 앱 운영자컨테이너 앱 직무 운영자 역할의 설명은 운영 업무를 강조합니다. 하지만 와일드카드 행동은 비밀을 나열할 수 있는 권한도 부여합니다. 역할을 할당하기 전에 전체 권한 목록을 꼭 확인하세요.

권한을 좁힌 맞춤형 역할을 생성하세요

내장된 역할은 편의일 뿐 제한이 아닙니다. 만약 부여하려는 접근 권한 수준에 맞는 내장 역할이 없다면, 필요한 작업만 나열하고 액션은 listSecrets 생략하는 Azure 커스텀 역할을 정의하세요.

예를 들어, 다음 커스텀 역할은 사용자가 작업을 부여 listSecrets 하지 않고도 작업과 실행을 확인하고 실행을 중단할 수 있게 합니다:

{
  "Name": "Container Apps Jobs Execution Stopper",
  "IsCustom": true,
  "Description": "View Container Apps jobs and stop running executions.",
  "Actions": [
    "Microsoft.App/jobs/read",
    "Microsoft.App/jobs/executions/read",
    "Microsoft.App/jobs/execution/read",
    "Microsoft.App/jobs/stop/action",
    "Microsoft.App/jobs/stop/execution/action",
    "Microsoft.App/managedEnvironments/read"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/<SUBSCRIPTION_ID>"
  ]
}

커스텀 역할 정의와 같은 Microsoft.App/jobs/*/action 와일드카드 패턴을 피하세요. 이 와일드카드는 listSecrets을(를) 포함하여 패턴과 일치하는 현재 및 향후의 모든 작업에 대한 권한을 부여합니다.

Warning

Container Apps 작업의 경우, 사용자 지정 역할에서 listSecrets 작업을 제외하는 것만으로는 해당 역할에 Microsoft.App/jobs/start/action 권한도 부여된 경우 비밀 값을 보호하기에 충분하지 않습니다. Jobs - Start REST API는 메인 및 init 컨테이너 이미지, 명령어, 환경 변수를 덮어쓸 수 있는 선택적 실행 템플릿을 수용합니다. 작업을 시작할 수 있고 비밀의 이름을 아는 사용자는 원하는 컨테이너에서 그 비밀을 참조하여 컨테이너 내에서 그 값을 읽을 수 있습니다. 컨테이너는 또한 자신 에게 제공되도록 설정된 모든 관리 신원을 사용할 수 있습니다. 작업 시작 권한은 작업의 비밀과 관리 가능한 신원을 사용할 수 있는 권한으로 간주하세요.

자세한 내용은 Azure 사용자 지정 역할을 참조하세요.

비밀 정의

비밀은 이름/값 쌍의 집합으로 정의됩니다. 각 비밀의 값은 직접 또는 Azure Key Vault 저장된 비밀에 대한 참조로 지정됩니다.

주의

프로덕션 환경에서 비밀 값을 직접 지정하지 마세요. 대신 Container Apps 섹션의 비밀 값 저장소 설명된 대로 Azure Key Vault 저장된 비밀에 대한 참조를 사용합니다.

Container Apps에 비밀 값 저장

다음은 포털을 통해 또는 다른 명령줄 옵션을 통해 비밀을 정의할 때 사용됩니다.

  1. Azure 포털 컨테이너 앱으로 이동합니다.

  2. 보안 섹션에서 비밀을 선택합니다.

  3. 추가를 선택합니다.

  4. 비밀 추가 컨텍스트 창에서 다음 정보를 입력합니다.

    • 이름: 비밀 이름
    • 형식: Container Apps 시크릿 선택
    • : 비밀 값
  5. 추가를 선택합니다.

Key Vault에서 비밀을 참조

비밀을 정의할 때 Azure Key Vault 저장된 비밀에 대한 참조를 만듭니다. Container Apps는 Key Vault 비밀 값을 자동으로 검색하고 컨테이너 앱에서 비밀로 사용할 수 있도록 합니다.

Key Vault 비밀을 참조하려면 먼저 컨테이너 앱에서 관리 ID를 사용하도록 설정하고 id에 Key Vault 비밀에 대한 액세스 권한을 부여해야 합니다.

컨테이너 앱에서 관리 ID를 사용하도록 설정하려면 관리 ID를 참조하세요.

Key Vault 비밀에 대한 액세스 권한을 부여하려면 Azure RBAC 역할 Key Vault 비밀 사용자 관리 ID에 부여합니다.

  1. Azure 포털 컨테이너 앱으로 이동합니다.

  2. 보안 섹션에서 ID를 선택합니다.

  3. 시스템 할당 탭에서 상태켜짐으로 설정합니다.

주의

여러 리소스에서 다시 사용할 수 있고 앱 수명 주기와 독립적으로 유지되는 사용자 할당 관리 ID를 사용할 수도 있습니다. 이를 사용하려면 사용자 할당 탭을 선택하고 기존 ID를 선택합니다.

  1. 저장을 선택하여 시스템 할당 관리 ID를 사용하도록 설정합니다.

  2. 시스템 할당 관리 ID를 사용하도록 설정하고 컨테이너 앱을 Microsoft Entra ID 등록하려는지 확인하는 팝업이 나타납니다. 를 선택합니다.

  3. 보안 섹션에서 비밀을 선택합니다.

  4. 추가를 선택합니다.

  5. 비밀 추가 컨텍스트 창에서 다음 정보를 입력합니다.

    • 이름: 비밀 이름
    • Type: Key Vault 참조 항목을 선택하세요.
    • Key Vault 비밀 URL: Key Vault 비밀의 URI입니다. 이 URI의 형식은 다음과 같습니다. https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
    • 식별:시스템 할당을 선택합니다.
  6. 추가를 선택합니다.

주의

UDR with Azure Firewall 사용하는 경우 AzureKeyVault 서비스 태그와 login.microsoft.com FQDN을 방화벽의 허용 목록에 추가해야 합니다. 필요한 추가 서비스 태그를 결정하려면 Azure Firewall UDR 구성을 참조하세요.

Key Vault 비밀 URI 및 비밀 교체

Key Vault 비밀 URI는 다음 형식 중 하나여야 합니다.

  • https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: 특정 버전의 비밀을 참조합니다.
  • https://myvault.vault.azure.net/secrets/mysecret: 비밀의 최신 버전을 참조합니다.

URI에 버전이 지정되지 않은 경우, 앱은 키 자격 증명 모음에 있는 최신 버전을 자동으로 사용합니다. 새 버전을 사용할 수 있게 되면 앱은 30분 이내에 자동으로 최신 버전을 검색합니다. 환경 변수의 비밀을 참조하는 활성 수정 버전은 자동으로 다시 시작되어 새 값을 선택합니다.

사용되는 비밀 버전을 완전히 제어하려면 URI에서 버전을 지정합니다.

환경 변수에서 시크릿 참조

비밀 정의 섹션에 설명된 대로 애플리케이션 수준에서 비밀을 선언한 후 컨테이너 앱에서 새 수정 버전을 만들 때 환경 변수에서 참조할 수 있습니다. 환경 변수가 비밀을 참조하면 해당 값은 비밀에 정의된 값으로 채워집니다.

예시

다음 예제에서는 애플리케이션 수준에서 연결 문자열 선언하는 애플리케이션을 보여 줍니다. 이 연결은 컨테이너 환경 변수 및 크기 조정 규칙에서 참조됩니다.

컨테이너 앱에서 비밀을 정의한 후 새 수정 버전을 만들 때 환경 변수에서 참조할 수 있습니다.

  1. Azure 포털 컨테이너 앱으로 이동합니다.

  2. 애플리케이션 섹션에서 수정 버전 및 복제본을 선택합니다.

  3. 수정 버전 및 복제본 페이지에서 새 수정 버전 만들기를 선택합니다.

  4. 새 수정 버전 만들기 및 배포 페이지의 컨테이너 탭의 컨테이너 이미지 섹션에서 컨테이너를 선택합니다.

  5. 편집을 선택합니다.

  6. 컨테이너 컨텍스트 편집 창에서 환경 변수 탭을 선택합니다.

  7. 추가를 선택합니다.

  8. 다음 정보를 입력합니다.

    • 이름: 환경 변수 이름
    • 원본: 비밀 참조 선택하십시오
    • : 이전에 정의한 비밀을 선택합니다.
  9. 저장을 선택합니다.

  10. 새 수정 버전 만들기 및 배포 페이지에서 만들기를 선택하여 새 수정 버전을 만듭니다.

볼륨에 시크릿을 마운트하기

비밀 정의 섹션의 설명대로 애플리케이션 수준에서 비밀을 선언한 후에는 컨테이너 앱에서 새 수정 버전을 만들 때 볼륨 탑재에서 참조할 수 있습니다. 비밀을 볼륨에 탑재하면 각 비밀이 볼륨에서 파일로 탑재됩니다. 파일 이름은 비밀 이름이며 파일 콘텐츠는 비밀 값입니다. 볼륨 마운트에 있는 모든 비밀을 로드하거나 특정 비밀을 로드할 수 있습니다.

예시

컨테이너 앱에서 비밀을 정의 하고 나면, 새 수정 버전을 생성할 때 해당 비밀을 볼륨 탑재에서 참조할 수 있습니다.

  1. Azure 포털 컨테이너 앱으로 이동합니다.

  2. 애플리케이션 섹션에서 수정 버전 및 복제본을 선택합니다.

  3. 수정 버전 및 복제본 페이지에서 새 수정 버전 만들기를 선택합니다.

  4. 새 수정 버전 만들기 및 배포 페이지의 컨테이너 탭의 컨테이너 이미지 섹션에서 컨테이너를 선택합니다.

  5. 편집을 선택합니다.

  6. 컨테이너 편집 컨텍스트 창에서 볼륨 탑재 탭을 선택합니다.

  7. 새 볼륨 만들기를 선택합니다.

  8. 볼륨 추가 컨텍스트 창에서 다음 정보를 입력합니다.

    • 볼륨 유형: 를 선택합니다 Secret.
    • 이름: mysecrets
    • 모든 시크릿 탑재: 활성화됨

    주의

    특정 비밀을 로드하려면 모든 비밀 탑재를 사용하지 않도록 설정하고 로드할 비밀을 선택합니다.

  9. 추가를 선택합니다.

  10. 컨테이너 컨텍스트 편집 창의 볼륨 이름 아래에서 mysecrets를 선택합니다.

  11. 마운트 경로/mnt/secrets를 입력합니다.

  12. 저장을 선택합니다.

  13. 새 버전 개정을 생성하고 배포 페이지에서 생성을 선택하여 볼륨 마운트를 사용하여 새 버전 개정을 만듭니다.

Key Vault 참조 문제 해결

Azure Key Vault 비밀을 참조하는 경우 비밀 검색 또는 동기화 중에 문제가 발생할 수 있습니다. 일반적인 오류 및 해결 방법은 다음과 같습니다.

오류 원인 해결 방법
관리 ID를 사용할 수 없음 컨테이너 앱에 할당된 관리 ID가 없습니다. 컨테이너 앱에서 시스템 할당 또는 사용자 할당 관리 ID를 사용하도록 설정합니다. 관리 ID를 참조하세요.
ID를 찾을 수 없음 지정된 관리 ID가 없거나 컨테이너 앱에 할당되지 않습니다. 아이덴티티가 생성되어 아이덴티티 섹션의 컨테이너 앱에 할당되었는지 확인합니다.
Key Vault에서 비활성화된 비밀 비밀은 Key Vault 리소스에서 사용하지 않도록 설정됩니다. Azure 포털에서 Key Vault로 이동하여 비밀을 활성화합니다.
인증 실패 관리 ID에는 비밀을 읽는 데 필요한 권한이 없습니다. Key Vault 관리 ID에 Key Vault 비밀 사용자 역할을 부여합니다. Key Vault 비밀 사용자 참조하세요.
RBAC 권한이 거부됨 관리 ID에는 Key Vault 액세스할 수 있는 권한이 부족합니다. Key Vault RBAC 역할 할당을 확인하고 비밀에 대한 읽기 권한이 포함되어 있는지 확인합니다.

다음 단계