이전포스팅에 이어 인증 절차를 추가해봅시다. 👍
이번 포스팅(인증)에서는 도메인을 가지고있어야 진행할 수 있습니다.
Step #2) Cognito 생성하기
Consoleme에서 제공하는 인증 방식은 여러가지가 있습니다. (참고)
2022.2월 지금 기준으로 인증안함(로컬개발), Google 그룹, OIDC/OAuth2, SAML, 텍스트 헤더 방식이 있겠네요.
저는 이중에서 ALB+Cognito(OIDC)방식으로 진행하도록 하겠습니다.분명, 콘솔미 페이지에 설정 방법이 안내 되어있는데 찾기가 쉽지 않아서 .... 이 부분때문에 포스팅을 하게 되었다능..😥
먼저, Cognito 접속해서 사용자 풀을 만들어줍시다. (Cognito 콘솔이 새로 나왔습니다. 저는 새로운 콘솔로 볼게요!)
사용자 풀 생성을 클릭합니다.
1단계, 로그인 환경 구성 단계입니다. 이메일을 클릭하고 다음으로 넘어갑니다.(나중에 바꿀 수 없습니다!)
2단계, 보안요구사항구성 입니다. MFA 없음으로 하고 다음으로 넘어갑시다.
3단계, 가입환경 구성입니다.
사용자 스스로가 계정을 생성해서 들어올 수 없도록 하고 다음으로 넘어갑니다.
4단계, 메시지 전송 구성입니다.
이 부분에서 이메일 주소가 나오지 않는다면 버지니아 리전 SES에서 이메일 인증을 받으세요!! 이후 다음을 클릭합니다.
5단계, 앱통합 입니다. 여기서는 빨간색으로 표시된 부분 잘 보고 그대로 해주세요!
** 주의: 내가 사용할 수 있는 도메인 주소가 있어야 합니다.
6단계, 검토 및 생성입니다. 전체적으로 잘 못들어간 부분은 없는지 확인 후 사용자풀을 생성합니다.
이제 중요한것이 남았습니다! 앱클라이언트의 ID/보안키를 확인해야합니다.
위치는 사용자풀의 하위탭 "앱통합"을 선택하여 맨 아래로 쭉 내리면 있습니다.
그리고 이 앱 클라이언트 ID/보안키를 적어둡시다.
이 뒤에 설정파일에 들어가요!! 😉
Step #3) ALB 설정하기
이제 여기를 클릭하여 EC2콘솔로 이동하고 ALB를 생성해줍니다.
ALB를 생성하는것은 아래를 참고해주세요!
이제 ALB의 리스너 목록이 80, 443 두개가 있죠! 여기서 443리스너를 수정합니다.
Cognito목록이 드롭다운 될건데, 위에서 생성한거 선택해줍시다!
여기까지 설정하시고 저장하고, 규칙을 2개 더 생성해줄겁니다. (공식문서)
사용자 인증을 정상적으로 하기 위해서는 인증 URL은 우회하도록 설정해야겠죠! 아래 5개 경로에 대해서는 바로 타켓그룹에 전달해줍니다.
-
/noauth/v1/challenge_poller/*
-
/noauth/v1/challenge_generator/*
-
/api/v1/get_roles*
-
/api/v2/mtls/roles/*
-
/api/v1/get_credentials*
-
/api/v1/myheaders/?
-
/api/v2/get_resource_url*
여기까지 완료 되었다면 이제 AWS콘솔에서 작업할 내용은 끝났습니다!
이제 EC2로 돌아가서 설정파일을 바꿔줍시다~~!
Step #4) 설정파일 바꾸고 시작하기
Consoleme는 YAML파일을 구성해야 합니다. 정상적으로 동작하려면요! (저도아직 다 파악못했습니다.알려주실분..? 😞)
구성파일 로드 순서는 아래와 같습니다.
-
환경변수: CONFIG_LOCATION
-
작업디렉토리의 consoleme.yaml
-
~/.config/consoleme/config.yaml
-
/etc/consoleme/config/config.yaml
-
작업디렉토리의 example_config/example_config_development.yaml >>기본파일
저는 이제 /etc/consoleme/config 디렉토리에 아래 3개의 파일을 설정할겁니다.
1) /etc/consoleme/config/config.yaml
# vim /etc/consoleme/config/config.yaml 명령어로 파일을 열어 아래 내용을 복붙하세요!
extends:
- consoleme_config_header_auth.yaml
environment: dev
development: true
tornado:
xsrf: false # So you can test POST requests with Postman
_development_user_override: admin@example.com
_development_groups_override:
- groupa@example.com
- groupb@example.com
- configeditors@example.com
- consoleme_admins@example.com
- consoleme_admins # Groups do not need to be an email address
dynamodb_server: http://localhost:8005
redis:
host:
global: localhost
celery:
broker:
global: redis://localhost:6379/2
active_region: ap-northeast-2
export_to_terraform_enabled: true
challenge_url:
request_ip_must_match_challenge_creation_ip: false
logging:
stdout_enabled: true
format: "%(asctime)s - %(levelname)s - %(name)s - [%(filename)s:%(lineno)s - %(funcName)s() ] - %(message)s"
level: debug
file: /consoleme/logs/consoleme_tornado.log
2) /etc/consoleme/config/consoleme_config_header_auth.yaml
# vim /etc/consoleme/config/consoleme_config_header_auth.yaml 명령어로 파일을 열어 아래 내용을 복붙하세요!
<>부분을 확인하여 잘 수정해주세요!!
extends:
- consoleme_config_base.yaml
auth:
get_user_by_aws_alb_auth: true
set_auth_cookie: true
# [수정부분-logout_redirect_url]
logout_redirect_url: "https://<Cognito 도메인을 입력하세요>.auth.ap-northeast-2.amazoncognito.com/logout?response_type=code&client_id=<여기에 코그니토 앱클라이언트 ID 넣으세요!>&logout_uri=https://<여기에 내 도메인을 입력하세요>"
extra_auth_cookies:
- AWSELBAuthSessionCookie-0
remote_ip:
trusted_remote_ip_header: X-Forwarded-For
get_user_by_oidc_settings:
# [수정부분-metadata_url] 코그니토 사용자 풀 ID는 코그니토 메인페이지에서 확인할 수있습니다.
metadata_url: https://cognito-idp.ap-northeast-2.amazonaws.com/<여기에 코그니토 사용자 풀 ID넣으세요!>/.well-known/openid-configuration
jwt_verify: true
jwt_email_key: email
jwt_groups_key: cognito:groups
grant_type: authorization_code
id_token_response_key: id_token
access_token_response_key: access_token
access_token_audience: null
oidc_secrets:
#[수정부분-client_id/secret] 코그니토 앱클라이언트 ID/보안키는 코그니토생성 단계에서 복사해놨었죠?!
client_id: <여기에 코그니토 앱클라이언트 ID 넣으세요!>
secret: <여기에 코그니토 앱클라이언트 보안키 넣으세요!>
client_scope:
- openid
- email
development: true
url: http://localhost:8081
3) /etc/consoleme/config/consoleme_config_base.yaml
# vim /etc/consoleme/config/consoleme_config_base.yaml 명령어로 파일을 열어 아래 내용을 복붙하세요!
application_admin: admin@example.com
# These are the tornado settings. Set `debug` to false in production.
tornado:
debug: true
port: 8081
xsrf: true
xsrf_cookie_kwargs:
samesite: strict
account_ids_to_name:
# [수정부분] 실제 AWSAccountID를 입력하세요
"123456789012": prod_account
"123456789013": dev_account
# "123456789014": test
cloud_credential_authorization_mapping:
role_tags:
enabled: true
authorized_groups_tags:
- consoleme-authorized
authorized_groups_cli_only_tags:
- consoleme-owner-dl
- consoleme-authorized-cli-only
aws:
issuer: example
region: "ap-northeast-2"
celery:
active_region: ap-northeast-2
cli_auth:
certificate_header: certificate_header
required_headers:
- RequiredMTLSHeader: RequiredMTLSHeaderValue
groups:
can_edit_config:
- admin@example.com
can_admin_policies:
- admin@example.com
# developement_notification_emails:
# - developer@example.com
# can_edit_config:
# - configeditors@example.com
# can_edit_policies:
# - policyeditors@example.com
jwt:
email_key: email
support_contact: admin@example.com
support_chat_url: https://myslack.slack.com/archives/123123123
documentation_page: https://github.com/Netflix/consoleme/
logging_levels:
asyncio: WARNING
boto3: CRITICAL
boto: CRITICAL
botocore: CRITICAL
elasticsearch.trace: ERROR
elasticsearch: ERROR
nose: CRITICAL
parso.python.diff: WARNING
s3transfer: CRITICAL
spectator.HttpClient: WARNING
spectator.Registry: WARNING
urllib3: ERROR
ses:
support_reference: "Please contact us at consoleme@example.com if you have any questions or concerns."
# [수정부분-arn] SES에서 인증받은 도메인or이메일의 ARN을 쓰세요.
arn: "arn:aws:ses:ap-northeast-2:123456789012:identity/admin@example.com"
region: "ap-northeast-2"
consoleme:
name: consoleme
# [수정부분-sender] SES에서 사용가능한 이메일을 쓰세요.
sender: admin@example.com
challenge_url:
enabled: true
example_config:
is_example_config: true
title: "Warning:"
text: |-
This configuration has no authentication configured. Do not use in a production environment. Do not publicly expose this endpoint or your AWS environment will be compromised! Click [here](/generate_config) to generate a configuration.
routes: .*
모든 설정이 완료 되었다면 3개의 파일이 다 있는지 점검해봅시다.
(env) root@ec2:/etc/consoleme/config# ls -al
total 28
drwxr-xr-x 2 root root 4096 Feb 14 04:32 .
drwxr-xr-x 3 root root 4096 Feb 12 07:23 ..
-rw-r--r-- 1 root root 1665 Feb 12 16:16 config.yaml
-rw-r--r-- 1 root root 8846 Feb 14 00:54 consoleme_config_base.yaml
-rw-r--r-- 1 root root 1195 Feb 12 15:24 consoleme_config_header_auth.yaml
이제 실행해볼까요?
(env) root@ec2:/consoleme# python /consoleme/consoleme/__main__.py
서비스등록을 하셨다면😉 systemctl restart consoleme
이제 브라우저를 켜고 접속해봅시다.
바로 Cognito 인증 경로로 넘어갔죠? 코그니토에서 사용자를 생성하고, 그 사용자로 로그인해봅시다.
로그인 잘 되었나요? ㅎㅎ
로그아웃도 한번 해보세요!
일단, 여기까지 ALB+Congito 인증 부분이었습니다.
다음에 User/Group Mapping 으로 다시 뵙겠습니다! 뿅🤓☄️