본문 바로가기

개발/AWS

AWS Secret Manager

  • 목적
    • Next.js 프레임워크 내에서 .env 파일 내의 S3 관련 Secret Key 노출을 방지할 수 있는 방법을 모색함
    • 빌드 후 배포시 .env 파일이 유실되어 릴리즈 버전에서 s3 접근에 리스크 존재, 이를 방지하기 위함

AWS Secret Manager

import * as AWS from "@aws-sdk/client-secrets-manager";
const client = new AWS.SecretsManager({ region: "REGION" });

// async/await.
try {
  const data = await client.listSecrets(params);
  // process data.
} catch (error) {
  // error handling.
}

// Promises.
client
  .listSecrets(params)
  .then((data) => {
    // process data.
  })
  .catch((error) => {
    // error handling.
  });

// callbacks.
client.listSecrets(params, (err, data) => {
  // process err and data.
});
import {
  GetSecretValueCommand,
  SecretsManagerClient,
} from "@aws-sdk/client-secrets-manager";

export const getSecretValue = async (secretName = "SECRET_NAME") => {
  const client = new SecretsManagerClient();
  const response = await client.send(
    new GetSecretValueCommand({
      SecretId: secretName,
    }),
  );
  console.log(response);

  if (response.SecretString) {
    return response.SecretString;
  }

  if (response.SecretBinary) {
    return response.SecretBinary;
  }
};
  • 환경 변수 로드 순서

환경변수는 다음과 같은 곳에서 순서대로 조회되며, 해당 변수가 발견되면 중지된다.

  1. process.env
  2. .env.$(NODE_ENV).local
  3. .env.local( NODE_ENV인 경우에는 확인되지 않습니다 test.)
  4. .env.$(NODE_ENV)
  5. .env