728x90

AWS

IAM

비밀번호 정책

AWS 에서는 다양한 선택을 통해 비밀번호정책을 생성 가능함

최소 길이

허용 문자 / 숫자 / 특수기호

비밀번호 허용 또는 금지 가능

일정시간이 지나면 만료 안내를 통해 새롭게 비밀번호 설정하도록 할 수 있음

 

MFA - Multi Factor Authentication

비밀번호와 보호장치를 함꼐 사용하는 것

가상 MFA 장치

Google Authenticator ( 폰만)

Authy(여러장치)

 

Yubico 사 Yubikey 범용 키 장치

하드웨어 Key Fob 키팝 

 

 

728x90

'study > TIL' 카테고리의 다른 글

[TIL] 2024-05-20 AWS  (0) 2024.05.20
[TIL] 2024-05-17 AWS  (0) 2024.05.17
[TIL] 2024-05-14 AWS  (0) 2024.05.14
[TIL] 2024-05-13 AWS  (0) 2024.05.13
[TIL] 2024-05-10 AWS  (0) 2024.05.10
728x90

먼저 UserEntity를 정의 합니다.

package com.hiio.adminserver.entity.user;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.*;

@Entity
@Table(name = "T_USER")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserEntity {

    @Id
    @Column(name = "USER_EMAIL", length = 512)
    private String email;

    @Column(name = "USER_PASSWORD", length = 64, nullable = true)
    private String password;

    @Column(name = "USER_NAME", length = 64, nullable = true)
    private String name;
}

Email 을 id로 하고 512의 길이를 가집니다.
password는 null이 들어 올 수 있고 길이는 64입니다.
name 은 비밀번호와 마찬가지로 null을 허용하고 길이는 64입니다.

추후에 속성들이 추가 되거나 수정할 예정입니다.

그럼 이제 Repository를 하나 만들어 줍니다.

package com.hiio.adminserver.repository.user;

import com.hiio.adminserver.entity.user.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<UserEntity, String> {
}

그리고 총 3개의 insert 테스트 코드를 작성해 줬습니다.

  1. 아무런 속성값을 입력하지 않으면 JpaSystemException이 발생하는 것이 예상값 테스트
  2. 이메일 속성값에 빈문자열을 입력했을 경우 TransactionSystemException이 발생하는 것이 예상값인 테스트
  3. 이메일 속성값만을 넣은 테스트 코드

package com.hiio.adminserver.User;


import com.hiio.adminserver.entity.user.UserEntity;
import com.hiio.adminserver.repository.user.UserRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.transaction.TransactionSystemException;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
class UserRepositoryTest {
    private final Logger log = LoggerFactory.getLogger(getClass());

    @Autowired
    private UserRepository userRepo;

    @Test
    @DisplayName("Insert User Exception JpaSystemException")
    void insertUserJpaSystemException(){
        Exception exception = assertThrows(JpaSystemException.class,()->{
            UserEntity user = UserEntity.builder().build();
            userRepo.save(user);
            userRepo.flush();
        });
        log.error(exception.getClass().getName());
        exception.printStackTrace();
        assertThat(exception.getMessage(), containsString("must be manually assigned before calling 'persist()'"));
    }
    @Test
    @DisplayName("Insert User Exception TransactionSystemException")
    void insertUserTransactionSystemException(){
        Exception exception = assertThrows(TransactionSystemException.class,()->{
            UserEntity user = UserEntity.builder().email("").build();
            userRepo.save(user);
            userRepo.flush();
        });
        log.error(exception.getClass().getName());
        exception.printStackTrace();
        assertThat(exception.getMessage(), containsString("Could not commit JPA transaction"));
    }
    @Test
    @DisplayName("Insert User Fill Email")
    @Transactional
    void insertUser(){
        UserEntity user = UserEntity.builder().email("asd@asd.com").build();
        userRepo.save(user);
    }


}
728x90
728x90

콘솔 root 계정으로 접속

IAM 서비스 접속

사용자(Users)에서 사용자 생성

IAM 은 전체 서비스로 리전에 상관없음 IAM에서 사용자를 생성하면 어디서나 사용가능

 

 

사용자 생성

 

다음으로 권한 설정

 

그룹생성

 

 

admin 그룹 추가 가능

 

다음 클릭

 

검토

 

태그 추가

 

 

 

 

사용자 생성 완료

 

사용자가 추가됨

 

 

그룹도 추가됨

 

 

 

그룹 클릭해서 보면 사용자가 추가되어 있음

 

 

사용자를 보면 권한 정책이 그룹에 의해서 추가되어 있음을 알수 있음

 

콘솔 별칭 생성

 

새 URL 로 접속하면

IAM 사용자로 로그인 가능

로그인 후 계정을 클릭하면

IAM 사용자가 나옴

 

 

그룹에 정책을 적용시 해당 그룹 사용자들에게 모두 적용

인라인 정책은 사용자에게 직접 권한 정책 부여

사용자는 여러 그룹의 정책을 상속받을수있음

 

정책 구조

버전 포함

ID는 선택

Statement는 여러개 일수도

SID는 선택

effect는 allow 또는 deny

principal 는 account/user/role

action은 effect에 기반한 api 호출 목록

resource는 적용될 action의 resource 목록

condition은 statement가 언제 적용될지 정함

 

# 중요 : Effect / Principle / Action / Resource

728x90

'study > TIL' 카테고리의 다른 글

[TIL] 2024-05-17 AWS  (0) 2024.05.17
[TIL] 2024-05-16 AWS  (0) 2024.05.16
[TIL] 2024-05-13 AWS  (0) 2024.05.13
[TIL] 2024-05-10 AWS  (0) 2024.05.10
[TIL] 2024-05-09 , 자바스크립트 정규표현식 사이트 / catalina.out 라인 끊어서 저장  (0) 2024.05.09

+ Recent posts