Provider Credentials용 envVarMappings 소개

발행: (2026년 2월 12일 오전 09:00 GMT+9)
5 분 소요

Source: Pulumi Blog

위에 제공된 소스 링크 외에 번역할 텍스트를 알려주시면, 해당 내용을 한국어로 번역해 드리겠습니다.

서로 다른 자격 증명을 사용하는 여러 공급자 실행

공급자는 전통적으로 고정된 환경 변수 이름(예: AWS_ACCESS_KEY_ID, ARM_CLIENT_SECRET)에 의존합니다. 이 때문에 동일한 유형의 두 공급자—예를 들어 서로 다른 계정을 대상으로 하는 두 개의 AWS 공급자—를 단일 Pulumi 프로그램에서 환경 변수만으로 구성하기가 어려웠습니다.

Pulumi v3.220.0은 envVarMappings 라는 새로운 리소스 옵션을 도입했습니다. 이를 통해 공급자 환경 변수를 사용자 정의 키로 다시 매핑할 수 있어 이 제한을 해결합니다.

인증 옵션

Pulumi 공급자를 구성할 때 자격 증명을 제공하는 두 가지 주요 방법이 있습니다:

1. Pulumi 구성 (Pulumi.yaml에 저장)

pulumi config set azure-native:clientSecret  --secret

2. 환경 변수

export ARM_CLIENT_SECRET=1234567

환경 변수는 CI 파이프라인에서 특히 편리하거나, 비밀을 상태 파일에 기록하고 싶지 않을 때(암호화된 경우에도) 유용합니다. 그러나 공급자에서 요구하는 하드코딩된 변수 이름은 여러 상황에서 문제를 일으킬 수 있습니다.

When the built‑in variables fall short

  • Multiple provider instances needing different credentials but sharing the same variable name.
    For example, using two explicit Azure providers for different subscriptions could not be configured via separate environment variables. The only alternative was to set the credentials in the provider configuration, which writes secrets to state and can generate noisy diffs during token rotation.

envVarMappings 로 환경 변수 재매핑하기

envVarMappings 를 사용하면 제공자에게 기대하는 변수를 사용자 정의 환경 변수에서 읽도록 지정할 수 있습니다.

Concept:

“내 Pulumi 제공자가 기대하는 모든 환경 변수에 대해, 해당 제공자에게 사용자 정의 환경 변수의 값을 사용하도록 지정하고 싶다.”

Example

제공자가 ARM_CLIENT_SECRET 를 기대하지만, 대신 CUSTOM_ARM_CLIENT_SECRET 에 정의된 다른 값을 사용하고 싶다고 가정해 보겠습니다.

export CUSTOM_ARM_CLIENT_SECRET=7654321

그 다음 매핑을 사용해 제공자를 구성합니다.

TypeScript

import * as pulumi from "@pulumi/pulumi";
import * as command from "@pulumi/command";

const provider = new command.Provider("command-provider", {}, {
    envVarMappings: {
        // If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
        "CUSTOM_ARM_CLIENT_SECRET": "ARM_CLIENT_SECRET",
    },
});

Python

import pulumi
import pulumi_command as command

provider = command.Provider("command-provider",
    opts=pulumi.ResourceOptions(
        env_var_mappings={
            # If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
            "CUSTOM_ARM_CLIENT_SECRET": "ARM_CLIENT_SECRET",
        }
    )
)

Go

provider, err := command.NewProvider(ctx,
    "command-provider",
    &command.ProviderArgs{},
    pulumi.EnvVarMappings(map[string]string{
        // If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
        "CUSTOM_ARM_CLIENT_SECRET": "ARM_CLIENT_SECRET",
    }),
)
if err != nil {
    return err
}

C#

var provider = new Command.Provider("command-provider",
    new Command.ProviderArgs(),
    new CustomResourceOptions
    {
        EnvVarMappings = new Dictionary
        {
            // If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
            { "CUSTOM_ARM_CLIENT_SECRET", "ARM_CLIENT_SECRET" }
        }
    });

Java

var provider = new Provider("command-provider",
    ProviderArgs.Empty,
    CustomResourceOptions.builder()
        .envVarMappings(Map.of(
            // If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
            "CUSTOM_ARM_CLIENT_SECRET", "ARM_CLIENT_SECRET"))
        .build());

YAML (Pulumi YAML)

resources:
  command-provider:
    type: pulumi:providers:command
    options:
      envVarMappings:
        # If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
        CUSTOM_ARM_CLIENT_SECRET: ARM_CLIENT_SECRET

envVarMappings 를 사용하면 각 제공자가 고유한 이름의 환경 변수에서 필요한 변수를 읽을 수 있어, 동일한 프로그램 내에서 여러 인증 세트를 사용할 수 있습니다.

오늘 바로 사용해 보세요

Pulumi v3.220.0 이상을 사용하고, 이를 지원하는 모든 공급자에 envVarMappings를 추가하세요. 전체 참고 사항은 공식 envVarMappings 문서를 확인하십시오.

행복한 코딩 되세요!

0 조회
Back to Blog

관련 글

더 보기 »

내 첫 번째 성공적인 CICD 배포

저는 이미 JavaScript, Git, GitHub Actions, Docker 약간, 빌드 도구와 테스트를 조금 알고 있는 상태에서 DEVOPS 학습 여정을 시작했습니다. 저는 …