- https://catalog.workshops.aws/verifiedaccessworkshop/en-US/introduction/getting-started/self-hosted-event
- 해당 핸즈온 은 위의 링크인 Workshop Studio 기반으로 작성하였습니다.
- 랩 기반 인프라는 언급된 cloudformation 템플릿을 통해 미국 동부(버지니아 북부) us-east-1에 배포됩니다. (한국은 서비스가 현제는 없습니다.)
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코드가 발생합니다.
결과
리소스 정리
- 신뢰 제공자를 확인된 액세스 인스턴스에서 분리
- 확인된 액세스 인스턴스 삭제
- 확인된 액세스 끝점 삭제
- 확인된 액세스 그룹 삭제
- IAM Identity Center 신뢰 제공자 삭제
- 클라우드 형성 스택 삭제