소개
unicreds는 AWS 계정 내에서 보안 비밀을 관리하기 위한 명령줄 도구입니다. DynamoDB와 KMS를 사용하여 자격 증명을 안전하게 저장하고 암호화하며, IAM을 통해 접근을 제어합니다. Versent에서 개발한 이 도구는 credstash를 기반으로 작성되었으며, Go 언어로 구현되었습니다. 주로 AWS 환경을 사용하는 개발자 및 시스템 관리자가 외부 관리 없이 내부에서 시크릿을 다루는 데 유용합니다.
상세정보
비밀 저장 및 관리
unicreds는 put 명령을 통해 자격 증명을 DynamoDB에 저장하고, KMS로 암호화할 수 있습니다. put-file 명령을 사용하면 파일의 내용을 직접 저장할 수도 있습니다.
비밀 조회
get 명령을 통해 특정 버전의 자격 증명을 가져올 수 있으며, getall 또는 list 명령을 사용해 저장된 모든 자격 증명의 이름과 버전을 확인할 수 있습니다. 출력 형식은 CSV 또는 JSON으로 지정할 수 있습니다.
비밀 삭제
delete 명령을 사용해 특정 자격 증명을 저장소에서 완전히 제거할 수 있습니다.
환경 변수 주입 실행
exec 명령을 사용하면 모든 저장된 시크릿을 환경 변수로 로드한 후 지정된 명령을 실행할 수 있습니다. 이는 컨테이너나 스크립트에서 외부 노출 없이 안전하게 시크릿을 사용하는 데 유용합니다.
다운로드 및 설치 방법
unicreds는 GitHub 릴리스 페이지에서 아카이브 파일을 다운로드하여 수동으로 설치할 수 있습니다. macOS 사용자는 Homebrew를 통해 brew tap versent/homebrew-taps 및 brew install unicreds 명령으로 설치할 수 있습니다. Windows에서는 공식 패키지 관리자 지원이 명시되지 않았으므로, GitHub에서 바이너리를 직접 받아 PATH에 추가하는 방식으로 사용해야 합니다.
기본 사용법 및 명령어
unicreds는 AWS 프로파일과 지역을 지정하여 동작합니다. 기본 프로파일을 사용할 경우 간단히 unicreds list로 저장된 자격 증명을 확인할 수 있습니다. 다른 지역이나 프로파일을 지정하려면 -r 및 -p 플래그를 사용합니다. 예를 들어 unicreds -r us-west-2 -p MYPROFILE list와 같이 실행할 수 있습니다. IAM 역할을 가정해야 하는 경우 -R 플래그로 역할 ARN을 지정할 수 있습니다.
암호화 컨텍스트를 사용하려면 -E 플래그로 키-값 쌍을 추가할 수 있습니다. 예를 들어 unicreds put test123 -E 'stack:123' testingsup과 같이 저장하고, 동일한 컨텍스트로 unicreds get test123 -E 'stack:123'로 가져올 수 있습니다. 컨텍스트가 일치하지 않으면 복호화에 실패합니다.
도움말은 --help, 버전 확인은 --version, 디버그 모드는 --debug로 활성화할 수 있습니다.
지원 환경 및 시스템 요구사항
unicreds는 AWS 환경을 전제로 하므로, 사용 전 AWS CLI가 설치되고 ~/.aws/credentials 및 ~/.aws/config에 유효한 자격 증명이 설정되어 있어야 합니다. 또한 KMS 키가 생성되어 있고, 이에 alias/credstash 별칭이 할당되어 있어야 합니다. DynamoDB 테이블은 unicreds setup 명령을 통해 생성할 수 있습니다. 이 도구는 Go로 작성되어 있으며, 배포형 바이너리를 제공하므로 별도의 Go 환경은 필요하지 않습니다.
최신 버전 및 업데이트
현재 버전은 1.5.1이며, 최신 소스 코드 및 릴리스 정보는 GitHub 저장소에서 확인할 수 있습니다. 자동 버전 기능 사용 시 2015년 9월 이전에 발생한 정렬 오류가 있을 수 있으니, credstash-migrate-autoversion.py 스크립트를 사용해 이전 버전을 마이그레이션하는 것이 권장됩니다.
제한 사항 및 확인 사항
unicreds는 AWS 환경에 강하게 의존하므로, AWS 계정 없이 단독으로 사용할 수 없습니다. KMS 키와 DynamoDB 테이블 설정이 선행되어야 하며, 초기 설정 과정이 필요합니다. 또한 암호화 컨텍스트 검증 실패 시 InvalidCiphertextException 오류가 발생하므로, 저장 시 사용한 컨텍스트와 정확히 일치시켜야 합니다.
시스템 요구사항
별도의 시스템 요구사항이 등록되지 않았습니다.


