- AWS에서 IAM의 보안 모범 사례 정의

1. AWS 계정 루트 사용자의 액세스 키 잠금

2. MFA 활성화

3. 개별 IAM 사용자 생성

4. 사용자 그룹을 이용한 접근 권한 할당

5. 사용자에 대한 강력한 암호 정책 구성

 

1. AWS 계정 루트 사용자의 액세스 키 잠금

루트 사용자의 권한을 이용해서 프로그램으로 AWS의 리소스 조작을 지양하기 위해 루트 사용자의 액세스 키는 없는 상태로 두는 것이 좋다.

액세스 키가 이미 생성 되어 있다면 삭제를 해주자.

콘솔의 우측 위 aws계정 이름을 클릭 하여 "보안 자격 증명" 관리 화면 열기

액세스 키 삭제 항목을 선택 하여 활성화된 액세스 키를 찾아 삭제

 


2. MFA 활성화

루트 사용자의 권한이 강력한데 비해 인증 방법이 초기에는 메일주소와 비밀번호 뿐이기 때문에 더 안정한 방법이 필요 하다.

Google Authenticator나 Authy를 이용해서 가상 MFA 디바이스를 이용하는게 좋다.

AWS 관리 콘솔을 열어 "보안 자격 증명"으로 이동

 

멀티 팩터 인증(MFA) 항목을 선택 후 활성화 버튼을 클릭

디바이스 종류를 가상 MFA 디바이스를 선택 하고 계속 진행을 한다

 


3. 개별 IAM 사용자 생성

일상적인 개발 조작을 수행하는 일반 사용자인 IAM 사용자를 생성 한다.

 

IAM 대시보드로 이동해서 사용자 메뉴로 이동 후 "사용자 추가" 실행

사용자 세부 정보를 설정 해줘야 하는데 사용자 이름에는 다른 사용자와 중복 되지 않는 이름을 설정

"암호 - AWS 관리 콘솔 엑세스" 항목에 체크

 

권한 설정에서 사용자 혹은 그룹을 선택 할 수 있다.

그룹에 사용자 추가를 선택

 

태그 추가 항목에서는 지정한 이름 외에 사용자를 구별하는 정보를 추가 할 수 있다.

IAM 사용자가 수백명 정도의 대규모일 경우 이름과 함께 관리자 부서 이름 역할 등을 이용해 쉽게 관리가 가능 하다.

일단 패스

 

검토 후 사용자 만들기 클릭

 

생성한 사용자 에게 메일을 전송 할 수 있다

IAM 사용자여도 루트와 마찬 가지로 MFA를 활성화 할 수 있다. 그리고 하는 것이 좋다.

 


4. 사용자 그룹을 이용한 접근 권한 할당

사용자 그룹에 접근 권한을 할당 해서 효율 적으로 누락 없이 사용자에게 접근 권한 부여가 가능 하다

 

루트 사용자로 로그인한 뒤 관리 콘솔 화면을 열어 IAM대시보드 -> 액세스관리 -> 사용자 그룹을 클릭 후 그룹을 생성 한다

그룹 이름을 입력 하는데 접근 권한을 관리한느 것을 고려해서 역할을 의미한 이름을 적는 것이 좋다

예) Developers, Financial Managers

 

접근권한 부여에서는 여러 리소스로의 접근 권한을 묶은 정책(policy)를 제공 한다.

정책을 직접 만들 수도 있지만 미리 설정된 정책을 부여 하는 것이 훨씬 편리하다.

PowerUserAccess 와 IAMFullAccess 를 검색 하여 선택 해준다.

PowerUserAccess는 AWS안의 리소스에 대한 모든 접근 권한을 가진다.

IAMFullAccess 정책은 IAM에 대한 모든 접근 권한을 가진다.

두 정책 모두 AWS 계정 자체에 대한 계약 해지는 할 수 없기 때문에 루트 사용자보다 안전하다.

 

그룹을 생성했기 때문에 이제 그룹에 사용자를 추가 할 수 있다

액세스 관리 -> 사용자 그룹을 클릭 해서 IAM 사용자를 추가 하려는 그룹 이름을 클릭 하면 사용자 추가를 할 수 있다

 

비밀번호 정책을 설정할 수도 있다

쉬운 비밀 번호를 이용 할 수 없도록 제한을 추가 할 수 있다

액세스 관리 -> 계정 설정 -> 암호 정책 변경 버튼 클릭

"최소 암호 길이 적용 10자"

"1개 이상의 라틴 알파벳 소문자 필수"

"1개 이상의 숫자 필수"

이정도를 설정 해주자

 

 

 

- 본 내용은 도서 "aws로 시작하는 인프라 구축의 정석"에서 발췌 하였습니다.

1. public/index.php

 

// 라이브러리 호출

2. vendor/autoload.php

 

// 기본 기능 선언

3. bootstrap/app.php

 

4. app/http/kernel.php

 

5. config/app.php

 

6. routes/web.php

 

7. 라우트에 정의된 컨트롤러나 뷰 페이지 호출

'Laravel' 카테고리의 다른 글

라라벨 설치하기 (도커, WSL2, Ubuntu 활용)  (0) 2023.05.02

Windows 파워 쉘 실행 (관리자모드)

 

아래 명령어로 컴퓨터에 설치할 수 있는 리눅스 목록을 확인 할 수 있다.

wsl --list --online

 

 

우분투 설치

wsl --install --d Ubuntu

완료하면 파워 쉘 종료

 

 

도커 데스크탑 설치 후 재부팅 하면 우분투 OS 설정을 하라고 함

Enter new UNIX username: ubuntu

New password: 임의지정

 

통과되면 이제 내 컴퓨터에 또다른 리눅스가 설치 된 것이다

 

도커 데스크탑에서 아래 그림처럼 ubuntu를 활성화 해준다

 

 

종료한 파워 쉘 다시 실행 (관리자모드)

wsl --list -v

설치한 우분투 목록 확인

 

실행시키기 위해서는 기본 값을 바꿔야 한다.

wsl -s Ubuntu

 

이제 다시 wsl 이라고만 입력하면 os에 라라벨을 받을 준비가 끝낫다.

 

 

리눅스 업데이트

sudo apt-get update

 

cd /var
mkdir www
cd www

 

라라벨 설치

curl -s https://laravel.build/example-app | bash

 

마무리 쯤 우분투 비밀번호를 입력 하라고 하니 주의하자.

 

 

다운받은 라라벨 폴더의 이름을 html로 변경 (받기전에 example-app을 html로 바꿔 받아도 됨)

sudo mv example-app html

 

라라벨 설치 폴더로 이동

cd html

 

라라벨 실행

./vendor/bin/sail up

 

localhost를 확인해보면 실행된 라라벨을 확인 할 수 있다.

 

아래 명령어로 실행하면(-d)를 붙이면 파워 쉘 창에서 라라벨 실행 중에도 다른 명령어를 내릴 수 있다.

./vendor/bin/sail up -d

 

모든 세팅이 완료됨.

 

서버 종료

./vendor/bin/sail down

 

리눅스 시스템에 sail 등록 하기

nano ~/.bashrc

 

화살표키로 맨 하단에 내려간 뒤 맨 아래줄에 아래 내용을 작성

alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

컨트롤 + O로 저장 및 엔터, 컨트롤 + X로 나가기.

 

공식 홈페이지의 내용을 참고해서 적용

https://laravel.kr/docs/9.x/sail

 

라라벨 9.x - 세일-Sail

라라벨 한글 메뉴얼 9.x - 세일-Sail

laravel.kr

 

이렇게 하면 다음 재부팅 부터는 sail만 입력 해도 된다.

 

도커 재시작 후 확인

 

VS Code에서 Remote Development 플러그인 설치

컨트롤 + 시프트 + P를 입력해 "WSL-WSL에서 폴더 열기.." 클릭

Linux > Ubuntu > var > www > html 경로 폴더 선택

 

이제 도커가 켜져있는 동안 원하는대로 파일 수정이 가능 하다.

 

이제 아래 플러그인을 WSL에 설치 (미리설치하면 안됌)

Laravel Extra Intellisense 

Laravel Extension Pack

 

 

'Laravel' 카테고리의 다른 글

라라벨에서 파일을 출력하는 순서 정리  (0) 2023.05.27

라라벨 브리즈 사용

라라트러스트 사용

 

1. 라라벨 프로젝트 생성 후 라라벨 브리즈 설치

laravel new 프로젝트명
composer require laravel/breeze --dev
php artisan breeze:install
 
npm install
npm run dev
php artisan migrate

 

 

2. 라라 트러스트 이동

https://laratrust.santigarcor.me

 

Laravel role-based access control package | Laratrust

Laratrust is an easy and flexible way to add roles, permissions and teams authorization to your Laravel application

laratrust.santigarcor.me

 

 

3. 아래 명령어들을 순서대로 실행

# laratrust의 installation로 이동

composer require santigarcor/laratrust
php artisan vendor:publish --tag="laratrust"
php artisan laratrust:setup

 

# laratrust의 usage > seeder 메뉴로 이동

php artisan laratrust:seeder
php artisan vendor:publish --tag="laratrust-seeder"
composer dump-autoload

 

코드에 Seeder 설정

database/seeds/DatabaseSeeder.php에 추가

$this->call(LaratrustSeeder::class);

 

시더파일 생성 시 사용할 권한을 아래 그림과 같이 설정

admin, writer, user 3개의 권한을 설정한다고 가정

 

php artisan migrate 후 생성된 디비 테이블 확인

 

아래 명령 후 rolse 테이블에 권한 생성 된 거 확인

php artisan db:seed

 

 

4. 회원 가입 시 기본 권한 설정

https://laratrust.santigarcor.me/docs/7.x/usage/roles-and-permissions.html#assignment-2

 

Roles & Permissions | Laratrust

Laratrust is an easy and flexible way to add roles, permissions and teams authorization to your Laravel application

laratrust.santigarcor.me

$user->attachRole($admin);

 

register.blade.php 에서 회원 가입시 넘겨줄 권한 값을 받도록 수정

 

회원 가입 후 결과 값 확인

 

 

5. 메뉴 추가

권한에 따라 특정 메뉴를 보이도록 추가

 

권한이 없는 페이지 접속 시 오류 메시지

 

 

6. 오류 메시지 수정 하기

 

 

8. 라우트 설정하기

<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\DashboardController;


Route::get('/', function () {
    return view('welcome');
});

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth'])->name('dashboard');

// auth route for both
Route::group(['middleware' => ['auth']], function() {
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
});

// for users
Route::group(['middleware' => ['auth', 'role:user']], function() {
    Route::get('/dashboard/myprofile', [DashboardController::class, 'myprofile'])->name('dashboard.myprofile');
});

// for leader
Route::group(['middleware' => ['auth', 'role:leader']], function() {
    Route::get('/dashboard/groupcreate', [DashboardController::class, 'groupcreate'])->name('dashboard.groupcreate');
});


require __DIR__.'/auth.php';

 

1. 라라벨/ui 설치

composer require laravel/ui

 

 

2. Bootstrap css, js 파일 내용 복사

https://getbootstrap.com/docs/5.1/getting-started/introduction/

 

Introduction

Get started with Bootstrap, the world’s most popular framework for building responsive, mobile-first sites, with jsDelivr and a template starter page.

getbootstrap.com

CSS와 JS의 BUNDLE 주소로 가서 각각 파일 내용을 복사 한다.

 

 

3. 복사한 코드를 넣어줄 파일 폴더 생성

public 폴더 아래에 다음과 같이 폴더와 파일을 생성 한다.

frontend > css > custom.css , bootstrap5.css

frontend > js > bootstrap5.js

생성한 파일에는 부트스트랩 에서 복사한 내용을 복사 해 준다.

 

 

4. 소스 적

resoureces/views/layouts/app.blade.php 파일 수정

아래 형식으로 코드를 불러와 주면 된다.

<link href="{{ asset('frontend/css/bootstrap5.css') }}" rel="stylesheet">
<script src="{{ asset('frontend/js/bootstrap5.js') }}" defer></script>

0. User 스키마 수정 (create_users_table)

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->string('verification_code')->nullable();
        $table->integer('is_verified')->default(0);
        $table->rememberToken();
        $table->timestamps();
    });
}

 

 

1. MailController 만들기

php artisan make:controller MailController
class MailController extends Controller
{
    public static function sendSignupEmail($name, $email, $verification_code)
    {   
        $data = [
            'name' => $name,
            'verification_code' => $verification_code
        ];
        Mail::to($email)->send(new SignupEmail($data));
    }
}

 

 

2. 메일 빌더 생성

php artisan make:mail SignupEmail

 

 

3. RegisterController(회원가입 컨트롤러) 에서 회원 가입 시 메일 전송

public function register(Request $request)
{
    $user = new User();
    $user->name = $request->name;
    $user->email = $request->email;
    $user->password = Hash::make($request->password);
    $user->verification_code = sha1(time());
    $user->save();

    if($user != null) {
        // Sned email
        MailController::sendSignupEmail($user->name, $user->email, $user->verification_code);
        return redirect()->back()->with(session()->flash('alert-success', 'Your account has benn created. Please check email for verification link'));
    }

    return redirect()->back()->with(session()->flash('alert-danger', 'Something went wrong!'));
}

 

 

4. RegisterController(회원가입 컨트롤러) 에서 메일 인증 주소 클릭 시 정보 수정

public function verifyUser($key)
{
    $verification_code = $key;
    $user = User::where(['verification_code' => $verification_code])->first();
    if($user != null) {
        $user->is_verified = 1;
        $user->save();
        return redirect()->route('login')->with(session()->flash('alert-success', 'Your account is verified. Please Login!'));
    }

    return redirect()->route('login')->with(session()->flash('alert-danger', 'Invalid verification code!!'));
}

 

 

5. route 설정

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::get('/verify/{key}', [App\Http\Controllers\Auth\RegisterController::class, 'verifyUser'])->name('verufy.user');

 

 

6. 전송될 메일 페이지 생성

resources > views > mail > signup-email.blade.php

Hello {{ $email_data['name'] }}
<br><br>
Welcome to my website!
<br>
Please click the below link to verify your email and activate your account!
<br>
<br>
<a href="http://127.0.0.1:8000/verify/{{ $email_data['verification_code'] }}">Click Here!</a>

 

 

7. 회원 가입 완료, 메일 인증 완료 시 flash message 추가 하기

login.blade.php , register.blade.php

<div class="flash-message">
    @foreach (['danger', 'warning', 'success', 'info'] as $msg)
        @if (Session::has('alert-', $msg))
            <p class="alert alert-{{ $msg }}">{{ Session::get('alert-' . $msg) }} 
                <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
            </p>
        @endif
    @endforeach
</div>

 

+ Recent posts