AWS IAM이란 무엇인가 | no pg_hba.conf entry 에러
matjum을 배포하며 생긴 일
AWS IAM이란 무엇인가 | no pg_hba.conf entry 에러
1. AWS IAM이란 무엇인가
내일배움캠프에서 제공한 AWS 강의의 IAM 부분을 참고했다.
IAM(Identity and Access Management)이란?
- Route 53(DNS 서비스)와 같은 글로벌 서비스 (region 선택 x)
- Root Account: 회원가입 할 때 만들어지는 루트 사용자 계정. 공유는 물론이고 사용도 권장되지 않는다고 한다.
- 그래서 IAM 서비스를 통해 User, Group 단위로 권한을 만들어 사용한다. Policy를 통해 조정하며, 최소 권한 원칙(Principle of least privilege)을 준수하는 것을 권장한다.
Policy 알아보기
- json으로 설정한다. 아래는 속성 필드와 그 의미이다.
Version
: 정책의 버전. 현재는 2012-10-17로 고정되어 있다.Statement
: 정책의 규칙. 배열 형태로 여러 개의 규칙을 작성할 수 있다.Effect
: 규칙의 적용 여부로,allow
나deny
로 작성한다.Action
: 규칙이 적용되는 작업의 종류.s3:ListBucket
과 같은 형태로 작성한다.Resource
: 규칙이 적용되는 리소스의 ARN(Amazon Resource Name).arn:aws:s3:::my-bucket/*
과 같은 형태로 생겼다.Condition
: 규칙이 적용되는 조건.
이런 부분은 설정하며 찾아보면 될 것 같다.
사용해보기
- 사용자를 만들면 콘솔 로그인 URL, 사용자 이름, 암호가 담긴 csv 파일을 제공한다. 팀원 수대로 사용자를 만들고, 이 파일을 팀원들에게 공유하면 된다.
- 사용자 개별로 권한을 부여할 수도 있고, 그룹을 만들어 더 간편하게 부여할 수도 있다.
dev
라는 그룹에 부여한 권한이다. 그냥 이때 썼던 서비스에 대한 모든 FullAccess를 주고 있다… 최대 권한 원칙ㅎ
- 사용자에 그룹을 연결한다. 그럼 끝!
왜 IAM을 썼을까?
이전까지는
- IAM은 S3 서비스를 통해 이미지를 저장하고 서빙할 때 읽기 권한을 주기 위해 사용했던게 전부였다.
- EC2와 RDS로 배포를 몇 번 했었는데, RDS 같은 경우는 host와 user 관련 정보만 공유해도 접속이 가능했다. 그러나 EC2는 보안키가 필요해서 파일을 공유하는게 아닌 이상 접속이 쉽지 않았다.
- 그래서 배포를 맡은 한 명만 클라우드에 접속해 세팅을 하거나, pem키를 공유하는 방법으로 진행했었다.
IAM을 사용했을 때
- EC2 권한 설정만 해두면 모두가 클라우드 콘솔에 접속해 상태를 확인할 수 있다.
- 계정 공유나 pem키 공유에 비해 매우 안전하게 작업 권한을 나눌 수 있고, 그만큼 생산성도 확보된다.
2. no pg_hba.conf entry 에러
문제
1
error: no pg_hba.conf entry for host "", user "postgres", database "matjum", no encryption
- RDS, EC2 인스턴스 생성할 때 서로에 대한 보안 그룹 포트를 열어줘야 한다는 건 알고 있고, 설정도 했는데, 이런 에러가 뜨면서 EC2에서 접속이 불가능했다.
시도들
- 수동으로 포트 열어주는 방법 말고 AWS 내에서 연결해주는 옵션(RDS 인스턴스 만들때 EC2로 연결할거냐는 옵션이 있었음)으로 설정해도
- 퍼블릭 액세스를 허용해둬도
- 마스터 사용자 이름과 암호를 또 다시 확인해봐도
안 됐다…
해결
- 이 스택오버플로우 글을 보고 완전히 해결했다. theiskaa 선생님 감사합니다
- 파라미터 그룹에서
rds.force_ssl
속성값을0
으로 변경하면 된다. - 파라미터 그룹과 RDS DB 버전이 동일해야 하니 이 부분도 확인! (이거에서 또 몇 분 헤맸음ㅎ)
241126 추가
관련 내용이 상세하게 적혀 있는 AWS Docs가 있었다. [보러가기]
RDS for PostgreSQL 버전 15 이상의 rds.force_ssl 파라미터 기본값은 1(켜짐)입니다. rds.force_ssl 파라미터를 1(설정)로 설정하면 해당 DB 클러스터에 대한 연결 시 SSL/TLS를 요구합니다. rds.force_ssl 파라미터를 1(설정)로 설정하면 해당 DB 인스턴스에 대한 연결에 대해 SSL을 요구합니다.
어쨌든 한 보안 설정을 off 하는거니 잘 고려해볼 것…
그리고 새로운 에러
1
2
[Nest] 3467 - 09/02/2024, 2:31:19 PM ERROR [TypeOrmModule] Unable to connect to the database. Retrying (2)...
error: database "matjum" does not exist
- RDS 처음 만들면 DB 식별자대로 기본 데이터베이스 만들어 주는 걸로 아는데 없대서 당황스러웠다.
- 쿼리 날려서 만들어주려고 해당 호스트에 접속하려는데 아래와 같은 에러가 뜨며 도저히 접속이 되지 않았다.
1 2 3
➜ ~ psql -h ${myhost} -U postgres -d postgres -p 5432 psql: error: connection to server at "matjum.${myhost}", port 5432 failed: Operation timed out Is the server running on that host and accepting TCP/IP connections?
-d
옵션 빼도 같았다. 보안 설정 문제인듯
- 지쳐서 그냥 새로 만들었는데, 이 설정을 빼먹어서 그랬던 거였다.
- 웬만하면 초기 세팅을 꼼꼼하게 하는 방향으로… 의미 없는 삽질을 많이 했다.
This post is licensed under CC BY 4.0 by the author.