• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

PC-IP 적용 후, Gateway 경유 GET/POST `/users` - 접근 시 모두 Access Denied 가 뜨는 원인을 알 수 있을까요?

21.05.30 19:36 작성 조회수 493

1

몇번씩 강의를 돌려봐도 틀린곳이 보이질 않아서 여러 테스트를 해보았습니다.

PC할당IP >>> MSA  직접 접근 시에는,  잘 작동하였는데 반해,
Gateway 경유(localhost) 시, `/welcome` `health_check` `users` GET/POST 모두 차단 되더라구요.
학습진행이 어렵게 되어 버렸어요..ㅠㅠㅠ.

강사님.
고민끝에 유추되는 원인인데요,
Gateway 서버의 IP 주소가 문제가 되어 이런현상이 생긴걸까요?

  1. MSA(user-service) 는 PC-IP 를 통한 접근만 허용할 것이고,
  2. Gateway 를 통한 접근 IP 는 localhost( 127.0.0.1) 로 되어있으니,
  3. MSA 는 Gateway 로 부터 오는 요청은 WebSecurity 설정으로 인해 차단된다

혹시 이런 논리일까요?

또는 이런 방식도 유추됩니다.

  • .hasIpAddress("IP") 에 허용 IP 를 늘린다

혹시 몰라 프로젝트 압축파일 링크를 달았습니다

Link: `Users MicroService - Routes 테스트 까지 실습진행예제`


읽어주셔서 감사합니다.

    답변 5

    ·

    답변을 작성해보세요.

    1

    안녕하세요, 이도원입니다. 

    Gateway IP를 확인해 보기 위해서, 현재 사용하고 계시는 config-service와 apigateway-service 에서 어떤 profile을 사용하는지 확인해 보시기 바랍니다. config-service 기동 시 로그에 에러 메시지가 없었는지 확인해 보시고, 어떤 profile로 기동되었는지 확인하신 다음, apigateway-service에서 해당 profile가 정상적으로 반영되었는지도 확인해 보셔야 할 것 같습니다. 그리고, apigateway-service에서 사용하는 bootstrap.xml 파일에 정의되어 있는 profile의 내용도 확인해 보시기 바랍니다.  예를 들어 다음과 같이 bootstrap.xml 파일이 설정되었다고 했을 경우,

    spring:
    cloud:
    config:
    uri: http://127.0.0.1:8888
    name: user-service

    http://127.0.0.1:8888/user-service로 액세스했을 때, 현재 어떤 gateway.ip 가 어떤 값으로 설정되었는지 확인해 볼 수 있습니다. 위에서 다른 분들이 답변 하셨던 것처럼, 현재 사용하고 있는 PC의 IP또는 PC에서 사용하고 있는 Gateway의 IP를 설정하셔야 합니다. 아니면, 127.0.0.1 (localhost)로 지정해서 처리하시고 전체 진행 과정이 어떻게 처리되는지 확인해 보시는 것도 좋을 것 같습니다. 

    404 에러는 해당 페이지가 존재하지 않는 것이기 때문에, IP 또는 endpoint가 잘못 된 경우이고, 403은 접근 제한이기 때문에 IP가 차단된 경우(또는 지정된 IP가 아닌경우)에 대한 오류, 401은 인증 오류로 인해 해당 리소스에 접근할 수 없는 오류입니다. 

    감사합니다. 

    Truestar님의 프로필

    Truestar

    질문자

    2021.05.31

    강사님 제가 너무 이른 고민을 했었나 봅니다😢
    아직 배우지 않은 config-service 에서 IP 설정이 가능했던 거군요!!?

    apigateway 에 추가 방법도 숙지했습니다

    저는 것도 모르고 계속 WebSecurity 설정만으로 어떻게 해보려고 별에 별 방법으로 테스트 해봤던것 같아요..^^;

    명쾌한 답변 고맙습니다!

    1

    윤형두님의 프로필

    윤형두

    2021.05.30

    안녕하세요.  저도 수강생인데. 그 부분으로 해매다가 답변드립니다.

    WebSecurity.java 파일에서 hasIpAddress("192.168.XXX.XXX") 부분이 있는데... 해당 IP를 통해서

    접근을 해야만 동작이 가능하더라구요.

    그래서 저는 hasIpAddress -> permitAll로 변경 후 진행하고 있습니다.

    hasIpAddress(String) : 주어진 ip 주소로 오는 요청은 참

    참고바랍니다.

    Truestar님의 프로필

    Truestar

    질문자

    2021.05.31

    저의 경우 Window 기반 환경에 콘솔에서 ipconfig 로 알아낸다음 3가지 방식으로 다음 처럼 호출해봤어요

    • 192.168.1.XXX:8000/user-service/health_check
      : 결과 404 - 없는 페이지

    • localhost:8000/user-service/health_check
      : 결과 403 - Access Denied

    • 127.0.0.1:8000/user-service/health_check
      : 결과 403 - Access Denied

    이 방식으로도 안되셨던거죠?

    작동은 여전히 안되지만, 저만 문제가 있나 해서, 낙심 중에  위안이 되었습니다^^;

    0

    Tony님의 프로필

    Tony

    2022.07.09

    두가지 방식으로 접속했을때..

    404오류가 발생합니다.

    users or user-service/users는 접속이 가능하고,

    login일때만 발생합니다.

    0

    B#님의 프로필

    B#

    2021.10.21

    음 같은 곳에서 막혔는데, 뒤쪽에있는 Configuration Service부분을 듣고 오면 해결되는 문제인 거 같네요. 답변들이.. 듣고도 해결이 안 되면 다시 질문 남기겠습니다.

    0

    Truestar님의 프로필

    Truestar

    질문자

    2021.05.31

    자문자답으로 일단 돌아는 갑니다💦

    결론: 

    • 아래의 .hasIpAddress() 메서드를 통해 127.0.0.1 로 접근하게 하면 가능합니다
    • Gateway 는 127.0.0.1 , localhost 모두 접근이 가능합니다
    • MSA 직접접근시 `localhost`는 차단됩니다

    의문점:

    • 본인 PC-IP 로 설정된 경우, Gateway 경유 시 계속 차단이 되는 원인을 모르겠습니다.

    아래는 성공한 테스트 결과입니다.

    MSA user-service > WebSecurity.java

    public class WebSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    ...

    http.authorizeRequests().antMatchers("/**")
    .hasIpAddress("127.0.0.1")
    ...
    ...

    ...
    }
    }

    이렇게 설정 후,
       localhost 와 127.0.0.1 두가지의 경우로
    아래와 같이 테스트를 진행했습니다.

    1. MSA( user-service ) 직접 접근
        1. 성공
        2. 차단



    2. Gateway 경유 접근
        1. 성공
        2. 성공