Auth0 단일 로그인(SSO) 활성화

Auth0 단일 로그인(SSO) 활성화 (Enable Auth0 single sign-on (SSO))

Consul UI와 CLI에서 OpenID Connect(OIDC)로 SSO(단일 로그인)를 위해 Auth0를 사용하도록 Consul을 구성하는 과정을 설명해요. Enterprise 기능이에요.

출처: 문서

본문

이 페이지는 OpenID Connect(OIDC)를 사용해 Consul UI와 CLI에서 SSO(단일 로그인)를 위해 Auth0를 사용하도록 Consul을 구성하는 과정을 설명합니다.

OIDC 인증은 조직에서 SSO를 광범위하게 배포하려고 하고 개별 Consul ACL 토큰으로 액세스를 관리하고 싶지 않을 때 유용합니다. 구현되면 SSO는 Consul UI 또는 명령줄에서 시작할 수 있는 대화형 로그인 절차를 가능하게 합니다.

소개 (Introduction)

이 지침은 Consul이 Auth0의 데이터를 사용해 Consul ACL에 대한 권한을 자동으로 부여할 수 있도록 Auth0을 ID 공급자로 구성합니다. 이 접근 방식은 개별 사용자 토큰을 만들거나 다른 사용자에 대한 개별 권한을 수동으로 정의하지 않고 사용자 권한 부여를 통합합니다.

Enterprise 전용 여기에 설명된 SSO(단일 로그인) 기능은 Consul Enterprise가 필요합니다.

워크플로 (Workflow)

  • Consul 통합을 위한 Auth0 애플리케이션 구성
  • Auth0 사용자와 Consul 메타데이터를 연결하는 규칙 생성
  • Consul에 대한 OIDC 인증 방법 활성화
  • OIDC로 로그인

Auth0 애플리케이션 구성 (Configure Auth0 application)

Consul용 Auth0 애플리케이션을 구성하려면 Consul 에이전트 주소가 필요합니다. 이 주소는 Consul UI로 웹 브라우저에서 또는 CLI로 터미널에서 Consul에 액세스하는 데 사용하는 주소입니다. 주소를 가져오려면 다음 명령을 실행하세요.

$ echo $CONSUL_HTTP_ADDR
http://localhost:8500

이 경우 Consul 에이전트 주소는 기본 포트 8500에서 실행되는 localhost입니다. 다음으로 Auth0 App 대시보드(https://manage.auth0.com/#/)에서 Settings 탭을 엽니다.

Allowed Callback URLs 필드에 다음을 입력하세요.

http://localhost:8550/oidc/callback,
http://localhost:8500/ui/oidc/callback

http://localhost:8550/oidc/callback 주소는 CLI consul login -type=oidc -method=oidc 명령으로 로그인하기 위한 것입니다.

http://localhost:8500/ui/oidc/callback은 Consul UI로 로그인하기 위한 것입니다.

참고 콜백 URL은 쉼표로 구분되어야 합니다.

Auth0 사용자 및 메타데이터 만들기 (Create Auth0 users and metadata)

앱에 대한 Auth0 대시보드의 사이드바에서 Users & Roles > Users를 선택하고 Create User를 클릭하세요.

Auth0과 연관시키는 데이터는 기존 구성을 기준으로 변경될 수 있습니다. 이 예시는 user_metadata와 app_metadata를 사용해 Auth0을 구성합니다.

{
  // user_metadata (end-user editable)
  "first_name": "Kara",
  "last_name": "Danvers"
}
{
  // app_metadata (end-user not editable)
  "roles": ["engineering"]
}

Auth0에서 다음 javascript 함수로 새 규칙을 만드세요.

function (user, context, callback) {
   user.user_metadata = user.user_metadata || {};
   user.app_metadata = user.app_metadata || {};

   context.idToken['http://consul.internal/first_name'] = user.user_metadata.first_name || "";
   context.idToken['http://consul.internal/last_name'] = user.user_metadata.last_name || "";
   context.idToken['http://consul.internal/groups'] = user.app_metadata.roles || [];
   callback(null, user, context);
}

이 함수는 Auth0의 사용자 및 앱 메타데이터를 Consul의 데이터와 연결합니다.

이 예시는 JWT RFC의 일부가 아닌 클레임을 네임스페이스하기 위해 http://consul.internal을 사용합니다. 네임스페이스는 임의적이지만 고유해야 합니다. Auth0은 네임스페이스가 없고 RFC에 없는 클레임을 버려 고유한 네임스페이스의 존재를 강제합니다.

Consul에 대한 OIDC 인증 방법 활성화 (Enable the OIDC auth method for Consul)

Consul에 대한 OIDC 인증 방법을 활성화하려면 Auth0 애플리케이션을 가리키는 새 인증 방법 구성을 만들어야 합니다. 이 구성 파일의 내용은 Consul에 제공하는 방식에 따라 달라집니다.

Consul CLI 또는 HTTP API를 사용할 수 있습니다. 구성 파일 내용은 CLI를 사용하는지 HTTP API를 사용하는지에 따라 약간 다릅니다.

auth-method-config.json{
  "OIDCDiscoveryURL": "https://<AUTH0_DOMAIN>/",
  "OIDCClientID": "<AUTH0_CLIENT_ID>",
  "OIDCClientSecret": "<AUTH0_CLIENT_SECRET>",
  "BoundAudiences": ["<AUTH0_CLIENT_ID>"],
  "AllowedRedirectURIs": [
    "http://localhost:8550/oidc/callback",
    "http://localhost:8500/ui/oidc/callback"
  ],
  "ClaimMappings": {
    "http://consul.internal/first_name": "first_name",
    "http://consul.internal/last_name": "last_name"
  },
  "ListClaimMappings": {
    "http://consul.internal/groups": "groups"
  }
}
auth-method-config.json{
  "Name": "auth0",
  "Type": "oidc",
  "MaxTokenTTL": "5m",
  "Config": {
    "OIDCDiscoveryURL": "https://<AUTH0_DOMAIN>/",
    "OIDCClientID": "<AUTH0_CLIENT_ID>",
    "OIDCClientSecret": "<AUTH0_CLIENT_SECRET>",
    "BoundAudiences": ["<AUTH0_CLIENT_ID>"],
    "AllowedRedirectURIs": [
      "http://localhost:8550/oidc/callback",
      "http://localhost:8500/ui/oidc/callback"
    ],
    "ClaimMappings": {
      "http://consul.internal/first_name": "first_name",
      "http://consul.internal/last_name": "last_name"
    },
    "ListClaimMappings": {
      "http://consul.internal/groups": "groups"
    }
  }
}

위의 구성 파일에는 Auth0 애플리케이션의 값으로 바꿔야 하는 변수가 포함되어 있습니다. 다음을 반드시 바꾸세요.

  • <AUTH0_DOMAIN>
  • <AUTH0_CLIENT_ID>
  • <AUTH0_CLIENT_SECRET>

구성 파일을 만든 후 새 인증 방법이 적용되도록 Consul에 적용하세요.

consul acl auth-method CLI 명령으로 구성을 적용하세요.

$ consul acl auth-method create -type oidc \
    -name auth0 -max-token-ttl=5m \
    [email protected]

acl/auth-method API 엔드포인트로 구성을 적용하세요. 요청을 인증하기 위해 CONSUL_HTTP_TOKEN 환경 변수 사용을 참고하세요.

$ curl -sL --header "x-consul-token: $CONSUL_HTTP_TOKEN" \
   --request PUT http://localhost:8500/v1/acl/auth-method \
   --data @auth-method-config.json

인증 방법을 구성한 후 사용자에 대한 권한 부여를 자동화할 수 있습니다. 그렇게 하면 Consul은 ID와 인증 방법을 연결하는 데 필요한 것 외에 추가 작업 없이 증명된 ID를 역할 또는 서비스에 바인딩할 수 있습니다. Consul 바인딩 규칙으로 이 동작을 구성할 수 있습니다.

앱 메타데이터로 역할 권한 부여 (Grant role permissions with app metadata)

다음으로 Auth0 방법과 연결할 Consul ACL 역할과 토큰을 만드세요. 다음 명령은 eng-ro라는 ACL 역할을 만들고 Auth0 engineering 그룹의 사용자에게 할당합니다.

$ consul acl binding-rule create \
       -method=auth0 \
       -bind-type=role \
       -bind-name=eng-ro \
       -selector='engineering in list.groups'
ID:           7c9d6445-75c0-7d93-bb5e-d56100590950
Namespace:    default
AuthMethod:   auth0
Description:
BindType:     role
BindName:     eng-ro
Selector:     engineering in list.groups

Auth0에서 app_metadata에 engineering이 있는 모든 사용자에게 Consul eng-ro 역할이 할당됩니다. Consul ACL 역할과 Consul ACL 정책에 대한 자세한 내용은 Consul ACL 역할 및 Consul ACL 정책 문서를 확인하세요.

사용자 메타데이터로 서비스 권한 부여 (Grant service permissions with user metadata)

사용자에게 서비스를 등록할 수 있는 권한을 부여하려면 service 유형 바인딩을 사용하세요. 다음 예시는 engineering 그룹의 사용자가 자신의 이름에서 동적으로 생성된 토큰을 사용해 서비스를 등록할 수 있게 합니다.

$ consul acl binding-rule create \
       -method=auth0 \
       -bind-type=service \
       -bind-name='dev-${value.first_name}-${value.last_name}' \
       -selector='engineering in list.groups'
ID:           a5309527-f5e0-8034-0795-ed7a98b961d0
Namespace:    default
AuthMethod:   auth0
Description:
BindType:     service
BindName:     dev-${value.first_name}-${value.last_name}
Selector:     engineering in list.groups

OIDC로 로그인 (Login with OIDC)

구성이 완료된 후 Auth0을 사용해 Consul에 로그인할 수 있습니다.

$ consul login -method=auth0 -type=oidc -token-sink-file=dev.token

이 명령은 사용자 자격 증명으로 SSO를 사용해 Consul에 로그인할 수 있는 브라우저 페이지로 리디렉션합니다.

메시지가 표시되면 Auth0 App에 대한 Consul 액세스를 수락하고 승인하세요.

토큰 시크릿 ID는 UUID로 dev.token 싱크 파일에 기록됩니다.

f110aff6-4d5b-4563-80dd-4da6f74c1067

Consul CLI로 생성된 토큰의 세부 정보를 검토할 수 있습니다.

$ consul acl token read -self -token-file=dev.token
AccessorID:       cd887b52-263a-4ae2-8747-725b76d0a79f
SecretID:         f110aff6-4d5b-4563-80dd-4da6f74c1067
Namespace:        default
Description:      token created via OIDC login
Local:            true
Auth Method:      auth0
Create Time:      2020-04-28 15:00:49.790370772 -0500 CDT
Roles:
   7d3e3a66-8c0f-e528-944e-84df6b36a115 - eng-ro
Service Identities:
   dev-kara-danvers (Datacenters: all)

Consul UI로 이동해 Log in 버튼을 클릭하세요.

로그인이 성공하면 Consul UI로 이동할 수 있습니다.

다음 단계 (Next steps)

ACL(액세스 제어 목록)로 Consul 보호(Secure Consul with Access Control Lists (ACLs))를 완료해 Consul 데이터센터에 프로덕션 준비된 ACL을 구성하는 방법을 배우세요.

더 알아보기 (Learn more)