핸즈온으로 배우는 Verified Access 활용법

Zero Trust 란?

  • 디지털 자산에 대한 보안 제어를 제공하는 데 중점을 둔 개념
  • 적인 보안 모델 및 관련 메커니즘의 집합.
  • 암묵적인 신뢰를 전제하지 않으며 ⇒ 소스 IP만 맞으면 통과하고 신뢰한다 이것을 전제하지 않음
    전통적으로 네트워크 경계에만 의존했던 것 대신에 모든 액세스 요청에 대해 확인 및 지속적인 모니터링이 필요한 보안 프레임 워크

(이해를 돕기 위한 이미지,https://www.koit.co.kr/news/articleView.html?idxno=97151)

[상황: 원격 사용자가 사내 vpn망에 접속 → 해당 IP대역내에서 APP접속 ]

  • 네트워크 관리자가 VPN 정책을 관리 (소스 ip 관리, 유저 네임 관리, 암호화 방법, 인증 방법 구성 등)
  • App 접근을 어디까지 허용해 주거 누가 접근 가능하게 할 건지
  • 디바이스 기반의 정책을 통하여 사용자가 아무 기기나 들어와서 사용하는 것이 아닌 회사에서 지급한 노트북인지 허가받은 장비인지, OS 버전 맞는지, 업데이트 버전 맞는지 등 확인 ⇒ 네트워크 접속하는 장비 확인

AWS Verified Access란 ?

  • Zero Trust 구성을 간소화 합니다.
  • VPN 없는 보안 접근으로 어느 곳에서나 업무 수행이 가능 합니다.
  • 접속 기록을 통하여 로킹이 있기 때문에 어떤 액션을 취했는지 확인 및 분석 가능
  • identity 해당 업체의 정보를 통하여 로그인이 가능합니다.
  • 언어는 Cedar 사용 합니다.
  • 비용: https://aws.amazon.com/ko/verified-access/pricing/

  • 한 달에 100개 앱 추가해서 24시간 사용할 경우 (1개의 앱에 1시간 사용하면 된다고 생각하면 된다.)
    • 100 * 0.27 ⇒ 27$ 된다.
    • 대신 14만 8,800 이상 될 경우 0.20$ 된다. (200개 앱 추가해서 24시간 돌릴 경우 14만 8,800 시간이 된다.)
  • 프로세스 데이터 비용(처리된 데이터)은 GB 당 0.02$ ⇒ 앱 오랫동안 키고 사용하는 환경인 경우 과금이 된다

실습

템플릿 다운로드 합니다.

템플릿 업로드합니다. (S3로 URL 업로드 된 부분 확인 가능합니다.)

권한 부분 체크 후 생성합니다.

IAM ID 센터

구성은 아래와 같습니다.

IAM Identity Center 활성화 클릭 및 그룹을 생성합니다.

총 두 개의 그룹을 만들어 줍니다.

사용자를 추가합니다

아래와 같은 이메일 방식을 사용하여 하나의 이메일에 여러 사용자를 만들수 있습니다.

해당 그룹에 추가합니다.

이메일이 도착하며, 이메일 클릭 후 패스워드 설정합니다.

마찬가지로 user2 도 동일하게 생성 및 패스워드를 설정하여 줍니다.

user2는 아래의 그룹에 넣어줍니다.

IAM Identity Center -> 설정 -> 세션 설정 -> 구성 -> 15분 설정합니다 (기본은 8시간이다.)

VPC->확인된 액세스 신뢰 공급자->확인된 액세스 신뢰 공급자 생성

  • 자격 증명 센터를 한국에 만들 경우 비활성화로 나타납니다. (주의할 것)

VPC->확인된 액세스 인스턴스->확인된 액세스 인스턴스 생성

VPC ->확인된 액세스 그룹-> 확인된 액세스 그룹 생성

  • 정책 부분은 일단 넘어갑니다.

VPC -> 확인된 액세스 엔드포인트 -> 확인된 액세스 엔드포인트 생성

  • 애플리케이션 도메인 형식은 아래와 같다.
iam[계정].workshophub.network
ex)iam123.workshophub.network
  • 도메인 인증서는 워크숍 선택합니다.

  • 로드 밸런서는 IAMVA 선택합니다.
  • 엔드포인트는 iam[계정] 입니다.
  • 프로토콜은 환경에 따라 다르지만 여기선 HTTP입니다.

이제 아래와 같이 정책을 설정을 해줘야 한다.

확인 시 정책이 활성화되지 않은 부분을 알 수 있다.

그룹 정책 수정을 통하여 정책을 설정한다.

permit(principal, action, resource)
when {
    context.iam_idp.user.email.address like "*@gmail.com" || 
    context.iam_idp.user.user_name == "user1"
};

#메일이 gmail 이거나 사용자가 user1이면 허용한다.
# 둘을 조건으로 할려면 and인 && 하면 된다. 

세부정보 클릭 후 엔드포인트 도메인을 복사 후 메모장에 기입

EC2 -> 인스턴스 아무거나 선택 -> Session Manager 연결 (여기서는 AVA-POC-EC2 접속)

curl -d '{"ApplicationDomain": "iam<your account number>.workshophub.network", "EndpointDomain": "이부분은 엔드포인트"}' -H 'Content-Type: application/json' -X POST  https://p4b3a607m3.execute-api.us-east-1.amazonaws.com/dev/addrecord

정상적으로 될 경우 아래와 같이 IP가 나옵니다.

sh-4.2$ dig +short iam....workshophub.network
iam123.edge-...,e20a6c.prod.verified-access.us-east-1.amazonaws.com.
52.6...
3.93...

CNAME이 정상적으로 걸린 것을 알 수 있고 해당 CNAME의 IP가 저 두 개의 IP인 것입니다.

VPC -> AWS가 확인한 액세스 -> 확인된 액세스 인스턴스 -> 인스턴스 선택 -> 확인된 액세스 인스턴스 로깅 구성탭 -> 확인된 액세스 인스턴스 로깅 구성 수정 클릭

  • 트러블 슈팅 시 유용합니다.

위에서 질의한 해당 도메인으로 접근 후 출력 되는지 확인합니다.

  • user1

저 같은 경우 조건을 위에서 OR 이 아닌 AND를 주었으며

user2 계정으로 접속하였을 때 아래와 같이 확인하였습니다.

  • 로그인 후 MFA 설정하라고 출력 된 경우 IAM Identity Center -> 사용자 -> 사용자 선택 -> MFA 디바이스 -> 디바이스 등록 설정하면 됩니다.

사용자 신뢰 제공자로서의 Okta

Okta 개발자 계정이 없는 경우 아래의 링크를 통하여 만들어 줍니다.

https://developer.okta.com/signup/

Directory -> People -> Add Person 클릭하여 user 생성합니다.

사용자가 속할 그룹을 만들어 줍니다.

방금 만든 그룹을 선택 후 Assign people 누르고 위에서 만든 사용자를 넣어줍니다.

Applications -> Applications -> Create App Integration 클릭 합니다.

  • 아래와 같이 설정하여 줍니다.
  • 형식은 https://okta+aws 계정.workshophub.network/oauth2/idpresponse 입니다.

Save 후 Client ID, CLIENT SECRETS 복사해 둡니다.

Sign On 탭 → OpenID Connect ID Token

  • .*은 모든 그룹에 적용 시킨다는 설정이다.

AWS 콘솔 -> VPC -> 확인된 액세스 신뢰 공급자 -> 확인된 액세스 신뢰 공급자 생성 클릭합니다.

“https://${yourOktaDomain}/.well-known/openid-configuration”

위 형식에 맞춰 먼저 창을 하나 띄우셔야 하는데 yourOktaDomain 은 파란색으로 네 모친 부분입니다.

아래와 같이 설정합니다.

마지막 부분만 다르다는것을 알수가 있습니다.

VPC -> 확인된 액세스 인스턴스 ->확인된 액세스 인스턴스 생성

VPC -> 확인된 액세스 그룹 -> 확인된 액세스 그룹 생성

확인된 액세스 엔드포인트 이동 후 생성합니다.

  • 도메인 중간은 AWS 어카운트 입니다.
  • 주체가 Okta의 ‘Engineering’ 그룹에 속해 있을 경우에만, 해당 주체에게 특정 리소스에 대한 행동을 허용하라”라는 규칙을 정의하는 코드
permit(principal,action,resource)
  when {
      //user must be in Engineering group on Okta side
    context.Okta_Test.groups.contains("Engineering") 
  };

EC2 → 아무 인스턴스 선택 → Session Manager 접속

#아래와 같이 입력

curl -d '{"ApplicationDomain": "okta[aws어카운트].workshophub.network", "EndpointDomain": "위에서 만든 엑세스 엔드포인트 복붙"}' -H 'Content-Type: application/json' -X POST  https://p4b3a607m3.execute-api.us-east-1.amazonaws.com/dev/addrecord

명령어 입력 후 아래와 같이 나오면 됩니다.

위에서 Okta_Access_instance 클릭 후 로깅을 클라우드 워치로 설정하여 줍니다.

okta[aws 어카운트].workshophub.network 도메인을 입력하여 줍니다.

– 아이디 형식은 이메일 형식입니다.
권한이 없는 계정은 403코드가 발생합니다.

결과

리소스 정리

  1. 신뢰 제공자를 확인된 액세스 인스턴스에서 분리
  2. 확인된 액세스 인스턴스 삭제
  3. 확인된 액세스 끝점 삭제
  4. 확인된 액세스 그룹 삭제
  5. IAM Identity Center 신뢰 제공자 삭제
  6. 클라우드 형성 스택 삭제
위로 스크롤