Install Jenkins In AWS EC2

이미지
이번 글에서는 AWS EC2 를 console 을 통해서 생성하고, 생성한 EC2에 Jenkins 를 설치하는 과정을 살펴보겠다. 먼저 AWS console 에 로그인 하고 EC2 를 생성한다. 인스턴스 시작 버튼을 누른다. amazon linux 를 선택한다. EC2 유형은 small 이상으로 하는것이 좋다. jenkins 로 프로젝트를 Build 하는 과정에서 성능이 낮으면, Gradle 같은 경우 DaemonDisapperaredException 을 달콤하게 경험할 수 있다. 해당 예외의 경우 memory 가 부족해서 발생할 수 있다. https://medium.com/@kenkyee/yes-this-means-your-build-server-ran-out-of-memory-running-an-android-gradle-build-69bae138f94f 다음에는, Security Group 을 할당한다. 기본적으로 Jenkins 를 설치하기 위해서 SSH 를 허용하며, Jenkins 의 기본 port 는 8080 이기 때문에 8080 port 도 열어준다. 경고 메세지에서 확인이 가능하듯, 실제 운영에서는 특정 IP 에서만 접근이 가능하도록 하는 것이 좋다. VPC 와 Subnet public IP 및 DNS 그리고 Availability Zone 등 세부적인 사항들은 모두 default 설정을 따랐다. 실제 운영에서는 커스텀하게 설정해주는 것이 좋다. 이제 EC2 를 생성해준다. 정상적으로 EC2 가 생성되고 running 이라면 SSH 로 접속한다. 먼저 sudo yum update 를 해주자. 그렇다면, 이제 Jenkins 를 설치해보자. Jenkins 는 jdk8 이상의 버전이 필요하다. 하지만 기본적으로 설치 되어 있는 jdk 버전은  1.7 이다.  따라서, jdk 1.7 를 먼저 지우고, jdk11 aws corretto 를 설치한다. sudo yum remove java-1.7.0-openjdk 명령어를 통해서 지우...

Spring Security - Filters ( DelegatingFilterProxy, FilterChainProxy )

이미지
이번 글에서는 Spring Security Filter Chain 에 대해서 정리를 하려고 한다. https://spring.io/guides/topicals/spring-security-architecture Spring Security web infrastructure 는 Servlet  filter 기반이다.   아래의 이미지를 보면, http request 가 어떻게 처리 될 지 명백하게 이해할 수 있을것이다.  Client 는 Application 으로 요청을 보낸다. 그리고 해당 요청은 어떤 filter 들과 어떤 servlet 이 적용되야 하는지 request URI 에 따라서 판별된다. 최대 하나의 servlet 은 하나의 request 만 처리할 수 있지만, filter 는 chain 을 이루고 순서가 지정되며 실제로 request 자체를 처리할 때 filter 가 나머지 chain 이 처리 되지 않도록 할 수 있다. filter 는 이후에 적용될 filter 및 servlet 에 사용 될 request 와 response 를 수정할 수도 있다. 따라서 filter chain 의 순서는 매우 중요하다. Spring Boot 에서는 두 가지 메커니즘을 통해 filter chain 을 관리한다. Filter Type 의 @Beans 은 @Order 를 가지거나 Ordered 를 구현한다. one is that  @Beans  of type  Filter   can have an   @Order  or implement  Ordered Filter 들이 API 의 일부로서 순서를 갖는 FilterRegistrationBean 의 일부가 될 수 있다. the other is that they can be part of a  FilterRegistrationBean  that itself has an order as part of its A...

Spring Security - OAuth2 && JWT (JSON Web Token) - 2

이미지
지난 글에서  https://infondgndg91.blogspot.com/2020/06/spring-security-oauth2-jwt-json-web.html 간단하게 OAuth 2.0 과 JWT (Json Web Token) 에 대해 정리를 해보았다. 이번 시간에는 OAuth 2.0 4가지 type 중 간단한, Resource Owner Password Credentials Grant 를 구현하려고 한다. 먼저 인증 서버에 대한 구현이다. 간단하게 개발 스펙을 정리해보자면, Spring Boot 2.3.1.RELEASE  Java 14 guava 와 commons 는 애용해서 넣었다. 그리고 auth0 의 JWT, DB 는 mysql 을 사용했다. 당연히 security 와 web 을 추가했다. 그밖에, 롬복, 데브툴, 컨피규레이션 프로세서는 개발 시 많은 유용함이 있어서 당연히 사용했다. 다음은 application.yml 이다. 우선 jwt 와 관련된 내용들이며, 다음은 DataSource 내용들이다. DB 는 AWS RDS 를 사용했고, write 와 read 클러스터 구성이다. 따라서 write 와 read 를 각각 설정해주었다. 로깅은 개발 시 로깅을 디테일하게 켜서 보려고 해놓은거라서 중요한 것은 아니다. 그렇다면, 먼저 DataSource 설정이다. JdbcTemplate 을 사용려고 각각의 DataSource 마다 JdbcTemplate 을 Bean 으로 이용했다. 그 다음, 시큐리티 설정을 확인하자. AuthenticationProvider 를 구현한 커스텀 JWTAuthenticationProvider 을 사용했다. OAuth 2.0 Token 기반 인증 방식을 사용하기 때문에, 세션은 당연히 StateLess 무상태이다. csrf, header, formlogin 모두 disabled 했다. AuthenticationEntryPoint 를 구현하는 핸들러와 AccessDeniedHandler 를 구현하는 핸들러를 통해서...

Spring Security - OAuth2 && JWT (JSON Web Token) - 1

이미지
spring security 를 통해서 OAuth2 구현을 해 볼 예정이며, 먼저 이번 글에서는 OAuth2 개념과 JWT 개념에 대해서 정리해보려고 한다.  OAuth 2 란? OAuth 2.0 권한 부여 프레임워크를 사용하면 타사 애플리케이션의 자원 소유자와 HTTP 서비스 간의 승인 상호 작용을 조정해 자원 소유자를 대신해 HTTP 서비스에 대한 제한된 접근 권한을 얻거나 타사 애플리케이션이 자체적으로 접근 권한을 얻는다. 해당 사양은 RFC 5849, The OAuth 1.0 Protocol 에 설명된 더 이상 사용하지 않는 OAuth 1.0 프로토콜을 대체한다.      The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849 . https://tools.ietf.org/html/rfc6749 OAuth 2 를 활용하는 방법을 제대로 이해하려면 특정 역할과 역할 간의 관계를 이해해야 한다. 그렇다면, 각 권한 부여 프로세스에 참여하는 역할을 살펴보자. OAuth defines four roles: resource owner An entity capable of granting access to a pro...