ubuntu bastion 설정

  • ec2-microsite-bastion 통해서만 microSite EC2 접근 가능
    • ex:) ssh -i “.ssh/key.pem”  user@접속IP
    • 접속 이후 sudo su – user 변경명령어로 user 변경 이후 사용 가능
  • prod 서버 정보 설정
    • target prod server에 bastion 공개키 등록
      • ~/.ssh/id_rsa.pub 내용을 접속할 prod 리눅스 ~/.ssh/authorized_keys 에 추가해준다.
        • bastion server의 public key를 접속할 prod server의 인증키(~/.ssh/authorized_keys)에 추가
    • hosts 파일 수정
      • /etc/hosts 에 prod 서버 정보(ip 및 host) 추가
    • alias 수정
      • host명으로 바로 접속 가능하도록 신규 prod 서버 명령어 입력
      • /etc/bash.bashrc 파일 내
        alias service_name=”ssh ubuntu@host name”
        상위 ubuntu@이후 host정보는 /etc/hosts 정보에 추가 해줬기 때문에 접속 가능
    • aws 보안 그룹 port 및 ip 추가
      • 추가된 prod 서버의 보안 그룹에 bastion ip와 port 정보 추가

Spring Boot properties 암호화

Spring boot에서 사용하는 properties 파일의 내용을 암호화하여 사용하는 경우

해당 암호를 복호화하여 spring 상에서 사용 가능하도록 설정이 필요하다.

1
2
3
encryption:
    db:
      key: ENC(8/PndQUF80eMtQ9YiuMznw==)

상위 처럼 암호화된 값을 복화하여 사용하고 싶은 경우는

먼저 Spring boot의 main application.java 파일에 설정이 필요하다.

@EnableEncryptableProperties 어노테이션이 필요!

1
2
3
4
5
6
7
8
9
@EnableEncryptableProperties
@SpringBootApplication
public class DevEnjoyApplication {

    public static void main(String[] args) {
        SpringApplication.run(LinaBatchApplication.class, args);
    }

}

그리고 JasyptConfig.java(파일명 변경 가능) config 파일을 추가해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Configuration
public class JasyptConfig {

    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor() {
        String salt = System.getProperty("jasypt.encryptor.password");

        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(salt);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.salt.NoOpIVGenerator");
        config.setStringOutputType("base64");

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(config);

        return encryptor;
    }
}

상위 코드를 추가 해준다.

String salt 값을 코드상에 박아두고 사용해도 되지만 보안을 위해서

appliation 가동시에 VM Option으로

Djasypt.encryptor.password=암호값

상위 형식으로 사용하는 방법을 추천!

이렇게 설정하고 사용하면 에러가 난다.

@DataJpaTest 시에 password 지정을 하지 않았다고 에러가 발생한다.

이유는

1
2
3
4
5
6
jasypt:
  encryptor:
    bean: jasyptStringEncryptor
    property:
      prefix: ENC(
      suffix: )

상위 처럼 bean값과 property의 prefix, suffix 설정을 해주어야 에러가 나지 않는다.

prefix, suffix 값 설정 때문에 어마무시하게 삽질을 했다.

그리고 @DataJpaTest 테스트를 진행시에는

상위 config 파일로 생성한 JasyptConfig.java을 import 해주어야 정상적으로 복호화 기능 설정이 된다.

1
2
3
4
5
6
7
8
9
10
11
@Transactional
@DataJpaTest
@ActiveProfiles("local")
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import(JasyptConfig.class) // Import
public abstract class DevEnjoyRepositoryTest<T> {
    @Autowired
    protected T repository;

}

설치형 Gitlab과 Jenkins 설정 관련 이슈

설치형 Gitlab과 Jenkins 설정을 진행하다 보니

Gitlab에서 webhook 설정하는 부분에 정확한 설명이 없어서 정리

Gitlab과 Jenkins 설정 부분은 많은 정보가 있어서 세팅하기 쉬웠는데

실제 push 이후 Jenkins 빌드가 되지 않는 문제가 있었다.

해결 방법은

Gitlab(10.1.4)에서 Proejct > Settings > Integrations 하위 설정 부분에서

Webhooks URL 설정하는 방법에 있었다.

일반적으로 jenkins 프로젝트를 설정하면 해당 프로젝트의 url은

http://jenkins서버주소/job/project명

상위 방식이며 해당 url을 입력하면 연동 오류가 발생한다.

상위 이미지와 같이

http://jenkins서버주소/project/project명

중간에 job이 아닌 project 라는 영문으로 작성해야 연동 가능하다.