안녕하세요 여러분,
Discourse가 AWS [1] 인증을 처리하는 방식을 개선하는 방안을 검토 중입니다. 변경 사항을 적용하기 전에 현재 여러분의 설정 방식을 이해하고 싶습니다.
현재 상황
현재 Discourse에서 AWS 인증을 설정하는 방법은 다음과 같습니다:
옵션 1: 명시적 자격 증명 (사이트 설정을 통한)
- 사이트 설정에서
s3_access_key_id와s3_secret_access_key를 설정합니다. - 인증은 사이트별로 적용됩니다.
옵션 2: 명시적 자격 증명 (환경 변수를 통한)
- 다음 환경 변수를 설정합니다:
DISCOURSE_S3_ACCESS_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY - 멀티사이트 클러스터 내 모든 사이트에 동일한 인증이 적용됩니다.
옵션 3: “IAM 프로필 사용” 설정
s3_use_iam_profile사이트 설정을 활성화하거나 환경 변수DISCOURSE_S3_USE_IAM_PROFILE=true를 설정합니다.- Discourse가 AWS SDK를 통해 자격 증명을 자동으로 찾도록 지시합니다.
- 원래 EC2 인스턴스와 IMDS를 통한 자격 증명 획득을 위해 설계되었지만, 다른 환경에서도 작동합니다.
변경을 원하는 이유
1. 혼란을 주는 설정 이름
s3_use_iam_profile 설정은 오해의 소지가 있는 이름입니다. EC2 인스턴스 프로필에서만 작동하는 것처럼 보이지만, 실제로는 모든 AWS SDK 자격 증명 소스를 활성화합니다:
- EC2 인스턴스 프로필
- ECS 태스크 역할
- 환경 변수
- AWS 자격 증명 파일
- IAM 역할 가정(Role Assumption)
- 기타 등등…
2. 보안: 정적 키 vs. 역할 가정
저희 메탈 호스팅 플랫폼에서는 현재 정기적으로 로테이션되는 액세스 키를 사용하고 있습니다. 더 나은 격리, 접근 제어 기회, 그리고 더 나은 내부 프로세스를 지원하기 위해 역할 가명으로 전환하는 것을 목표로 하고 있습니다.
현재 방식의 단점:
- 액세스 키는 (로테이션될 때까지) 만료되지 않습니다.
- 권한 범위가 넓습니다.
- 유출 시 탈취될 수 있습니다.
- 수동 로테이션 절차가 필요합니다.
대신 역할 가명을 사용하는 것의 장점:
- IP 주소를 통해 영속적 자격 증명을 제한할 수 있습니다.
- 자동 만료되는 임시 자격 증명(보통 1시간)을 사용하여 작업을 수행합니다.
- 자격 증명이 필요할 때만 존재하므로 필요 시점 접근(Just-in-time access)이 가능합니다.
- 탈취된 임시 자격 증명이 빠르게 만료되므로 피해 범위가 줄어듭니다.
- 키 로테이션이 필요하지 않으며, 역할 가정 프로세스가 갱신을 처리합니다.
- 각 세션이 별도로 추적되므로 감사 트레일이 더 좋습니다.
검토 중인 사항
다음 중 하나를 고려하고 있습니다:
- 설정 이름을
aws_credentials_from_environment처럼 더 명확한 이름으로 변경 - 설정을 완전히 제거하고 자격 증명이 환경 변수에서 가져와야 하는지 사이트 설정에서 가져와야 하는지를 자동으로 감지
여러분의 의견이 필요합니다!
다음에 대해 알려주시기 바랍니다:
-
S3 인증 방식을 어떻게 사용하고 계신가요?
- 사이트 설정에 명시된 액세스 키
- EC2 인스턴스 프로필 (
s3_use_iam_profile활성화) - ECS 태스크 역할 (
s3_use_iam_profile활성화) - 환경 변수 (
s3_use_iam_profile활성화) - … 기타?
-
s3_use_iam_profile을 사용 중이시라면:- 어떤 환경에서 실행하고 계신가요? (EC2, ECS, Docker, 베어 메탈 등)
- 현재 이름/설명이 혼란을 주었나요?
- 다른 이름이 더 명확할까요?
-
이 설정에 대한 변경 사항에 우려가 있으신가요?
- 현재 설정이 깨질까 걱정되나요?
- 변경 사항을 테스트할 시간이 필요하신가요?
- 기타 고려 사항이 있나요?
왜 이것이 중요한가
더 나은 S3 인증은 다음과 같은 것을 의미합니다:
- 더 안전함 - 관리해야 할 정적 키가 없음
- 더 쉬운 설정 - 특히 클라우드 배포 환경에서
- 더 적은 혼란 - 더 명확한 설정 및 문서
- 최신 AWS 인증 패턴에 대한 더 나은 지원
여러분의 피드백은 모든 사람에게 유용한 개선을 만드는 데 도움이 됩니다. 설정 방식을 공유해 주셔서 감사합니다!
여기서 'AWS’는 '사용 중인 S3 호환 객체 저장소 프로바이더’로 읽으십시오 ↩︎