Published
- 7 min read
2. SSO 연결하기 / terraform으로 cross account관리하기
1. AWS SSO 개요
aws sso 서비스는 사용자가 조직 내의 여러 계정들을 액세스하는 데 필요한 인증권한을 하나로 통합하여 단일 포털에서 관리할 수 있도록 도와줍니다.
aws sso는 multi account 환경에서 반드시 필요한 서비스입니다.
설정한 자격증명 provider를 통해서 aws의 조직계정들을 관리할 수 있게 됩니다.
2. 리소스 생성
2.1 sso instance 생성
처음에는 반드시 identity center에서 수동으로 sso instance를 활성화해야 합니다. 활성화 버튼을 눌러서 sso instance를 활성화 합니다.
조직계정의 하위계정에서도 별도의 sso instance를 생성할 수 있습니다. 이 경우 조직인스턴스와 분리된 sso instance가 생성되는데 별도의 목적으로 sso를 분리해야할 경우가 아니라면 추천하지 않습니다.
2.2 sso 계정, 그룹 생성 및 추가
# 수동으로 생성된 sso instance를 가져옵니다.
data "aws_ssoadmin_instances" "example" {}
# SSO 사용자 생성
## 사용하고 있는 sso 자격증명 provider에 따라서
## 사용자 생성시 필요한 정보가 다를수 있습니다.
resource "aws_identitystore_user" "example_user" {
identity_store_id = tolist(data.aws_ssoadmin_instances.example.identity_store_ids)[0]
display_name = "홍길동"
user_name = "gildong.hong"
name {
given_name = "길동"
family_name = "홍"
}
emails {
primary = true
value = "gildong.hong@example.com"
}
}
# SSO 그룹 생성
resource "aws_identitystore_group" "admin_group" {
identity_store_id = tolist(data.aws_ssoadmin_instances.example.identity_store_ids)[0]
display_name = "Administrators"
description = "관리자 그룹"
}
# 사용자를 그룹에 추가
resource "aws_identitystore_group_membership" "example_membership" {
identity_store_id = tolist(data.aws_ssoadmin_instances.example.identity_store_ids)[0]
group_id = aws_identitystore_group.admin_group.group_id
member_id = aws_identitystore_user.example_user.user_id
}
만약 여러분의 계정을 올바르게 추가하였다면 사용자를 생성하면서 email인증이 오게 됩니다. 해당 인증을 완료시에 해당 sso 계정으로 aws access portal에 접속 할 수 있습니다.
비밀번호 재설정후에 user_name에 입력한값과 재설정한 비밀번호를 사용하여 로그인할 수 있습니다.
현재 로그인은 할 수 있지만 아직 권한세트를 추가 및 aws 계정에 할당하지 않았기 때문에 아무런 권한이 없습니다.
2.3 계정 권한 세트 추가
이제 권한세트를 그룹에 추가해야 합니다.
# 권한 세트 생성
resource "aws_ssoadmin_permission_set" "admin" {
name = "AdministratorAccess"
description = "관리자 권한"
instance_arn = tolist(data.aws_ssoadmin_instances.example.arns)[0]
session_duration = "PT12H"
}
# 권한 세트에 관리자 정책 연결
resource "aws_ssoadmin_managed_policy_attachment" "admin_policy" {
instance_arn = tolist(data.aws_ssoadmin_instances.example.arns)[0]
permission_set_arn = aws_ssoadmin_permission_set.admin.arn
managed_policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess"
}
# 권한 세트를 계정과 그룹에 할당
resource "aws_ssoadmin_account_assignment" "admin_assignment" {
instance_arn = tolist(data.aws_ssoadmin_instances.example.arns)[0]
permission_set_arn = aws_ssoadmin_permission_set.admin.arn
principal_id = aws_identitystore_group.admin_group.group_id
principal_type = "GROUP"
target_id = "123456789012" # 대상 AWS 조직 계정 ID를 입력하세요
target_type = "AWS_ACCOUNT"
}
권한세트를 추가하고 그룹에 할당하면 해당 그룹에 할당된 권한세트를 사용할 수 있게 됩니다.
아까까지 아무런 권한이 없던 sso 계정과 그룹이 이제 권한세트를 통해서 할당한 aws계정에 관리자 권한을 가지게 되었습니다.
2.4 aws sso cli에 설정
이제 sso까지 설정했으니 cli에서도 sso를 통하여 로그인하고 관리할 수 있게 해봅시다. access key, secret key를 사용하지 않고 sso를 통해서 로그인하고 관리할 수 있습니다.
vi ~/.aws/config
[default]
sso_start_url=sso 시작 url, AWS access portal URL을 입력해주세요
sso_region=sso 지역
sso_role_name=권한세트 이름
sso_account_id=대상 aws 계정 id
region=aws 지역
output=json
올바르게 입력했다면 aws sso login
명령어를 통해서 sso 계정으로 로그인할 수 있습니다.
이제 cli에서 access key, secret key를 직접 발급해서 사용하지않고 sso로그인을 통해 임시 토큰을 사용하여 로그인하고 관리할 수 있게 되었습니다.
3. 자격증명 공급자 바꾸기
여태까지 한것은 aws에서 제공하는 자격증명 공급자를 사용하여 로그인하는 방법이었습니다.
기존 sso 계정,그룹을 그대로 사용하면서 자격증명 공급자만 외부 공급자로 바꿀 수 있습니다.
관련 aws문서를 참조해주세요. https://docs.aws.amazon.com/singlesignon/latest/userguide/gs-gwp.html
여기서 1단계, 2단계, 3단계까지 진행한후에 sso 계정과, 구글계정의 속성들이 일치한다면 구글계정 로그인을 통해서 로그인할 수 있습니다.
자동프로비저닝은 구글계정과 sso계정을 자동으로 연결해주는 기능이지만 이전까지는 외부툴을 사용하여 싱크해주는 방법이 존재했었고 2025년 1월 기준 현재는 aws에서 지원해주듯 하지만 저는 아직 테스트 해보지 않았습니다.
주의하여 사용하시기 바랍니다.
결론
이번 포스팅에서는 sso를 통해서 조직계정에 접근관리할 수 있는 설정 방법들에 대해서 알아보았습니다.
다음 포스팅에서는 외부 계정을 내부 조직에 연결및 sso를 통합해서 관리하는 방법을 알아보겠습니다.