Post

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: 규칙의 적용 여부로, allowdeny로 작성한다.
  • 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.