Okta IdP 연결하기
Okta를 자격 증명 공급자로 사용해 Kiro Profile과 연결하고, 사용자·그룹을 프로비저닝하는 방법을 안내합니다.
Okta를 Kiro Profile과 연결하려면 다음 작업이 필요합니다.
- OIDC Okta 애플리케이션 생성
- OIDC 애플리케이션의 사용자 지정 스코프 설정
- Kiro Profile 설정
- SCIM 프로비저닝 애플리케이션 생성
애플리케이션이 두 개 필요한 이유
Okta를 사용할 때는 애플리케이션을 두 개 만들어야 합니다. 하나는 사용자 로그인을 위한 OIDC 애플리케이션이고, 다른 하나는 사용자와 그룹을 Kiro로 동기화하기 위한 SCIM 프로비저닝 애플리케이션(Okta App Catalog의 AWS IAM Identity Center 통합 사용)입니다.
1단계: OIDC 애플리케이션 생성
새 앱 통합 생성
Okta Admin Console에서 Applications -> Applications 섹션으로 이동해 "Create App integration"을 선택합니다. "Sign-in method"로 "OIDC - OpenID Connect"를, Application type으로 "Native Application"을 선택합니다.
애플리케이션에 Kiro-OIDC처럼 알아보기 쉬운 이름을 지정하고, "Grant type" 필드에서 "Refresh Token" 체크박스를 선택합니다. 나머지 필드는 기본값을 그대로 둡니다.
먼저 kiro://kiro.oauth/callback을 Sign-in redirect URI로 추가합니다. 이는 Okta 로그인 성공 후 사용자를 되돌려 보낼 때 Kiro 클라이언트가 수신 대기하는 URI 중 하나입니다.
다음으로 http://localhost:<port-number>/oauth/callback 형식의 Sign-in redirect URI 10개를 추가로 등록합니다. 이때 port-number는 다음 포트 번호 중 하나입니다 — 3128, 4649, 6588, 8008, 9091, 49153, 50153, 51153, 52153, 53153.
"Skip group assignment for now"가 선택되어 있는지 확인한 뒤 "Save"를 선택해 애플리케이션 생성을 완료합니다. 새로 만든 애플리케이션의 세부 정보가 표시됩니다.
사용자 및 그룹 추가
다음으로 애플리케이션에 포함될 사용자와 그룹을 추가합니다. "Assignments" 탭을 선택하고 "Assign" 버튼을 눌러 안내에 따라 Kiro에 접근해야 하는 사용자와 그룹을 추가합니다.
이로써 OIDC 애플리케이션 생성이 완료되었습니다.
2단계: 사용자 지정 스코프 설정
Kiro 전용 스코프 생성
OIDC 애플리케이션을 만들었으니, 이제 사용자 자격 증명이 Kiro에 접근할 올바른 권한을 제시할 수 있도록 스코프를 설정합니다. completions와 conversations, 두 개의 스코프를 설정합니다.
스코프별 권한
- codewhisperer:completions — 사용자가 Kiro의 인라인 코드 자동 완성 기능에 접근할 수 있도록 권한을 부여합니다.
- codewhisperer:conversations — 사용자가 Kiro의 채팅 및 대화 기능에 접근할 수 있도록 권한을 부여합니다.
조직에 필요한 스코프만 부여하세요. 접근 정책을 구성할 때 각 스코프가 미치는 영향을 이해해야 합니다.
Okta Admin Console에서 Security -> API 섹션으로 이동합니다. "Authorization Servers" 탭에서 "Add Authorization Server" 버튼을 선택합니다.
Authorization Server의 이름과 설명을 입력합니다. "Save"를 선택해 서버 추가를 완료합니다.
"Scopes" 탭을 선택하고 "Add Scope" 버튼을 눌러 Kiro 기능 접근을 허용하는 스코프를 추가합니다.
먼저 codewhisperer:completions 스코프를 추가하고 "User consent" 값을 "Implicit"으로 설정합니다. 나머지 필드는 기본값으로 둡니다. "Create"를 선택해 스코프를 추가합니다.
동일한 단계로 codewhisperer:conversations 스코프도 추가합니다.
접근 정책 추가
다음으로 Authorization Server에 접근 정책과 규칙을 추가해, Kiro OIDC 애플리케이션을 통해 Kiro가 접근할 수 있는 대상을 제어합니다.
"Access Policies" 탭을 선택하고 "Add Policy" 버튼을 선택합니다.
정책에 알아보기 쉬운 이름을 지정하고, 앞서 만든 Kiro OIDC 애플리케이션(Kiro-OIDC)에 정책을 할당합니다.
정책이 생성되면 새로 만든 정책에 대해 "Add rule"을 선택합니다.
"Scopes requested"를 제외한 모든 필드는 기본값으로 둡니다. "The following scopes:" 옵션을 선택하고 codewhisperer:completions, codewhisperer:conversations, offline_access 스코프를 추가합니다. "Create rule"을 선택해 규칙 추가를 완료합니다.
offline_access 스코프는 액세스 토큰이 만료될 때마다 사용자가 재인증하지 않아도 되도록, Kiro가 리프레시 토큰을 사용해 사용자 세션을 유지할 수 있게 해 줍니다.마지막으로 구성을 테스트합니다. "Token Preview" 탭을 선택합니다. "OAuth/OIDC client" 필드에서 Kiro용으로 만든 OIDC 애플리케이션(예: Kiro-OIDC)을 선택하고, "Grant type"으로 "Authorization Code"를 선택한 뒤, "Scopes" 필드에서 두 개의 codewhisperer 스코프와 offline_access를 선택합니다. "Preview Token" 버튼을 선택했을 때 구성이 유효하면, "Preview" 패널의 Payload 섹션에 값이 채워진 iss 속성이 표시되고 scp 속성에 선택한 세 개의 스코프가 포함됩니다.
이로써 Okta에서 애플리케이션을 구성하는 데 필요한 모든 단계를 완료했습니다. 이제 Kiro Profile을 만들고 사용자와 그룹을 구독시킬 수 있습니다.
3단계: Kiro Profile 설정
Kiro Profile 생성
Kiro 콘솔에서 "Sign up for Kiro"를 선택하고 "Set up application as Admin"을 선택합니다. "Connect an existing external Identity provider" 옵션을 선택합니다.
Okta Admin Console에서 Security -> API 섹션으로 이동해 Kiro용으로 만든 Authorization Server를 선택합니다.
방금 설정한 애플리케이션의 Issuer URI 값을 복사해 Kiro Profile의 Issuer URI 필드에 붙여 넣습니다.
Okta Admin Console에서 Applications 섹션으로 이동해 Kiro 통합용으로 만든 OIDC 애플리케이션(예: Kiro-OIDC)을 엽니다. Client ID 값을 복사해 Kiro Profile의 Client ID 필드에 붙여 넣습니다.
"Enable"을 선택해 Kiro Profile 생성을 완료합니다.
외부 자격 증명 공급자의 데이터를 암호화하기 위해 고객 관리형 KMS 키를 구성한 경우, Kiro가 SCIM을 통해 프로비저닝된 사용자와 그룹에 접근할 수 있도록 키 정책에 다음 문(statement)을 추가해야 합니다.
{
"Sid": "AllowKiroToUseKey",
"Effect": "Allow",
"Principal": {
"Service": "q.amazonaws.com"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "AllowIdentityStoreToUseKey",
"Effect": "Allow",
"Principal": {
"Service": "identitystore.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:ReEncryptTo",
"kms:DescribeKey",
"kms:ReEncryptFrom"
],
"Resource": "*"
}
도메인 추가 및 검증
Kiro 콘솔에서 "Settings" 버튼을 선택하고 Identity management -> Domains 섹션에서 "Add domain"을 선택해 회사 도메인을 추가합니다.
"Add"를 선택하면 도메인이 추가되고 검증 토큰이 표시됩니다. 검증 토큰을 복사합니다. 추가된 도메인은 Domains 목록에 "Pending" 상태로 나타납니다.
Amazon Route 53와 같은 DNS 공급자에서 해당 검증 토큰으로 TXT 레코드를 생성합니다.
구성이 유효하면 몇 분 후 상태가 "Verified"로 바뀝니다.
SCIM 액세스 토큰 추가
Kiro 콘솔에서 Settings → Identity Management → Access Tokens로 이동해 "Generate Token"을 선택하고 SCIM 프로비저닝용 액세스 토큰을 생성합니다. 이 토큰을 복사해 두세요. 4단계에서 SCIM 프로비저닝 애플리케이션을 구성할 때 필요합니다.
- SCIM 토큰은 자동으로 교체되지 않습니다. 조직의 자격 증명 교체 정책에 따라 수동으로 교체해야 합니다.
- 토큰이 유출된 경우, Kiro 관리 콘솔(Settings → Identity Management → Access Tokens)의 revoke 버튼으로 즉시 취소한 뒤 새 토큰을 생성하고 Okta의 프로비저닝 구성에 업데이트하세요.
4단계: SCIM 프로비저닝 애플리케이션 생성
앱 통합 생성
다음으로 SCIM 프로비저닝 애플리케이션을 만들고 사용자와 그룹을 구성합니다.
Okta Admin Console에서 Applications -> Applications 섹션으로 이동해 "Browse App Catalog"를 선택합니다. "AWS IAM Identity Center"를 검색하고 "Add Integration"을 선택합니다.
"Application label" 값이 "AWS IAM Identity Center"로 지정된 채 "General Settings" 탭이 열린 새 애플리케이션이 추가됩니다. 기본값을 그대로 두거나 레이블을 변경한 뒤 "Done"을 선택합니다.
이제 새로 만든 애플리케이션의 세부 정보가 표시됩니다. "Sign On" 탭의 SAML 설정(ACS URL, Issuer URL)은 기본값으로 두어도 됩니다. Kiro는 로그인에 SAML이 아니라 OIDC 앱을 사용합니다.
SCIM 프로비저닝 구성
다음으로 프로비저닝을 구성합니다. "Provisioning" 탭을 선택한 뒤 "Integration" 섹션을 선택합니다. 프로비저닝이 활성화되지 않았다는 메시지가 표시됩니다. "Configure API integration" 버튼을 선택해 프로비저닝 과정을 시작합니다.
"Enable API integration"을 체크합니다. 그러면 구성할 추가 필드가 표시됩니다.
- Base URL 설정 → Kiro 콘솔(Settings → Identity Management → SCIM Endpoint)의 SCIM 엔드포인트를 붙여 넣습니다.
- API Token 설정 → Kiro 콘솔(Settings → Identity Management → Access Tokens → Generate Token)의 액세스 토큰을 붙여 넣습니다.
- "Test API Credentials"를 선택합니다 — 성공으로 표시되어야 합니다.
- "Save"를 선택합니다.
- Provisioning 탭 → To App → Edit에서 다음을 활성화합니다.
- Create Users
- Update User Attributes
- "Save"를 선택합니다.
그룹 동기화
Okta에서 Kiro로 그룹을 푸시하려면 다음 지침을 따르세요.
사전 준비
그룹을 추가하기 전에 "department"와 "employeeNumber" 두 속성을 제거합니다. 앞서 만든 "AWS IAM Identity Center" 앱을 선택하고 "Provisioning" 탭에서 "To App"을 선택합니다. AWS IAM Identity Center Attribute Mappings 섹션까지 스크롤해 두 속성을 제거합니다.
먼저 동기화할 그룹을 할당합니다. "Assignments" 탭을 선택하고 "Assign" 버튼을 누른 뒤 "Assign to Groups" 옵션을 선택합니다. 사용 가능한 그룹 목록에서 동기화할 각 그룹의 "Assign"을 선택하고 안내에 따릅니다.
다음으로 그룹 동기화를 설정합니다.
- Push Groups 탭을 선택합니다. Push Groups 버튼을 선택하고 "Find groups by name" 옵션을 선택합니다.
- 푸시할 그룹을 선택하고 "Save"를 선택합니다.
- 구성이 올바르면 그룹 상태가 "Active"로 표시됩니다.
이로써 Okta에서 애플리케이션을 구성하고, 애플리케이션을 Kiro Profile과 연결하며, Profile에 사용자·그룹을 추가하는 데 필요한 모든 단계를 완료했습니다.
보안 고려 사항
세션 관리
- Kiro는 OIDC 리프레시 토큰으로 사용자 세션을 유지합니다. 세션이 만료되면 리프레시 토큰이 만료될 때까지 리프레시 토큰이 Kiro 세션을 독립적으로 유지합니다.
- Kiro 콘솔에서 활성 사용자 세션을 강제로 취소할 수는 없습니다. 접근을 제거하려면 Okta 애플리케이션에서 사용자를 제거해야 하며, 접근 권한은 다음 토큰 갱신 시도 시 취소됩니다.
- Kiro OIDC 애플리케이션에서 사용자를 제거하면 로그인이 차단됩니다(Applications → Kiro OIDC 애플리케이션 → Assignments → 사용자 옆의 x 선택).
리디렉션 URI 보안
- 이 가이드에 명시된 리디렉션 URI만 추가하세요.
Profile 삭제 경고
프로비저닝 후 Kiro Profile을 삭제하고 동일한 Okta 애플리케이션으로 새 Profile을 만들면 그룹 멤버십이 동기화되지 않습니다. 애플리케이션을 처음부터 다시 프로비저닝해야 합니다.
무단 접근 방지
- Kiro 애플리케이션에 임의의 사용자를 추가하지 마세요.
- 사용자가 Kiro 애플리케이션에 할당된 그룹의 구성원이 아닌지 확인하세요.
- 그룹 기반 구독을 생성한 후에는 Kiro 콘솔의 Subscriptions 탭을 검토해 의도하지 않은 사용자가 구독을 받지 않았는지 확인하세요.
사용자 제거 및 프로비저닝 해제 동작
- Okta의 Kiro 애플리케이션에서 사용자 할당을 제거합니다. 이렇게 하면 이후 모든 로그인 시도가 차단됩니다.
- 기존 세션은 다음 토큰 갱신이 시도될 때까지 활성 상태로 유지되며, 그 시점에 접근이 취소됩니다. 활성 세션이 즉시 종료되지는 않습니다.
- 구독 제거는 자동으로 이루어지지 않습니다. Okta 애플리케이션에서 사용자를 제거한 후에는 Kiro 콘솔에서 해당 사용자의 구독도 수동으로 삭제해 좌석을 반환해야 합니다.
그룹 멤버십 동기화 동작
- Kiro는 전적으로 Okta의 푸시 기반 SCIM 동기화에 의존합니다. Kiro는 Okta에 풀(pull)을 요청할 수 없습니다.
- 그룹 멤버십 변경은 발생하는 대로 Kiro에 푸시됩니다.
문제 해결
| 누락한 단계 | 증상 | 해결 방법 | 참고 |
|---|---|---|---|
| OIDC 앱에 사용자를 추가하지 않음 | 사용자가 로그인할 수 없음 | OIDC 애플리케이션의 Assignments 탭에서 사용자를 추가합니다. | 사용자는 OIDC 애플리케이션과 SCIM 프로비저닝 애플리케이션 모두에 있어야 합니다. |
| 사용자 생성을 위한 프로비저닝을 활성화하지 않음 | 사용자가 Kiro로 동기화되지 않음 | SCIM 프로비저닝 앱에서 Provisioning > To App으로 이동해 "Create Users"를 활성화합니다. | "Update User Attributes"도 함께 활성화하세요. |