외부 권한 부여 서버 구성 - NICE DCV 세션 관리자

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

외부 권한 부여 서버 구성

권한 부여 서버는 클라이언트 SDK 및 에이전트의 인증 및 권한 부여를 담당하는 서버입니다.

기본적으로 세션 관리자는 브로커를 권한 부여 서버로 사용하여 클라이언트 SDK용 OAuth 2.0 액세스 토큰과 에이전트용 소프트웨어 명령문을 생성합니다. 브로커를 권한 부여 서버로 사용하는 경우 추가 구성이 필요하지 않습니다.

브로커 대신 Amazon Cognito를 외부 권한 부여 서버로 사용하도록 세션 관리자를 구성할 수 있습니다. Amazon Cognito에 대한 자세한 내용은 Amazon Cognito 개발자 안내서를 참조하세요.

Amazon Cognito를 권한 부여 서버로 사용하려면
  1. 새 Amazon Cognito 사용자 풀을 생성합니다. 사용자 풀에 대한 자세한 내용은 Amazon Cognito 개발자 안내서Amazon Cognito의 기능을 참조하세요.

    create-user-pool 명령을 사용하고 풀 이름과 이를 생성할 리전을 지정합니다.

    이 예제에서는 풀의 이름을 dcv-session-manager-client-app으로 지정하고 us-east-1에 풀을 생성합니다.

    $ aws cognito-idp create-user-pool --pool-name dcv-session-manager-client-app --region us-east-1

    출력 예

    { "UserPoolClient": { "UserPoolId": "us-east-1_QLEXAMPLE", "ClientName": "dcv-session-manager-client-app", "ClientId": "15hhd8jij74hf32f24uEXAMPLE", "LastModifiedDate": 1602510048.054, "CreationDate": 1602510048.054, "RefreshTokenValidity": 30, "AllowedOAuthFlowsUserPoolClient": false } }

    다음 단계에서 필요하므로 userPoolId 값을 기록해 둡니다.

  2. 사용자 풀의 새 도메인을 생성합니다. create-user-pool-domain 명령을 사용하여 이전 단계에서 만든 사용자 풀의 도메인 이름과 userPoolId를 지정합니다.

    이 예제에서는 도메인 이름을 mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE로 지정하고 us-east-1에 도메인을 생성합니다.

    $ aws cognito-idp create-user-pool-domain --domain mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE --user-pool-id us-east-1_QLEXAMPLE --region us-east-1

    출력 예

    { "DomainDescription": { "UserPoolId": "us-east-1_QLEXAMPLE", "AWSAccountId": "123456789012", "Domain": "mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE", "S3Bucket": "aws-cognito-prod-pdx-assets", "CloudFrontDistribution": "dpp0gtexample.cloudfront.net", "Version": "20201012133715", "Status": "ACTIVE", "CustomDomainConfig": {} } }

    사용자 풀 도메인의 형식은 다음과 같습니다. https://domain_name.auth.region.amazoncognito.com 이 예제에서 사용자 풀 도메인은 https://mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE.auth.us-east-1.amazoncognito.com입니다.

  3. 사용자 풀 클라이언트를 생성합니다. create-user-pool-client 명령을 사용하여 생성한 사용자 풀의 userPoolId, 클라이언트의 이름, 사용자 풀을 생성할 리전을 지정합니다. 또한 생성 중인 사용자 풀 클라이언트에 대해 암호를 만들지 여부를 지정하는 --generate-secret 옵션을 포함합니다.

    이 경우 클라이언트 이름은 dcv-session-manager-client-app이며 us-east-1 리전에 생성합니다.

    $ aws cognito-idp create-user-pool-client --user-pool-id us-east-1_QLEXAMPLE --client-name dcv-session-manager-client-app --generate-secret --region us-east-1

    출력 예

    { "UserPoolClient": { "UserPoolId": "us-east-1_QLEXAMPLE", "ClientName": "dcv-session-manager-client-app", "ClientId": "2l9273hp6k2ut5cugg9EXAMPLE", "ClientSecret": "1vp5e8nec7cbf4m9me55mbmht91u61hlh0a78rq1qki1lEXAMPLE", "LastModifiedDate": 1602510291.498, "CreationDate": 1602510291.498, "RefreshTokenValidity": 30, "AllowedOAuthFlowsUserPoolClient": false } }
    참고

    ClientIdClientSecret 값을 적어둡니다. 개발자가 API 요청에 대한 액세스 토큰을 요청할 때 사용할 수 있도록 이 정보를 제공해야 합니다.

  4. 사용자 풀에 사용할 새로운 OAuth2.0 리소스 서버를 생성합니다. 리소스 서버는 액세스 보호가 되는 리소스의 서버로서, 액세스 토큰에 대한 인증된 요청을 처리합니다.

    create-resource-server 명령을 사용하여 사용자 풀의 userPoolId, 리소스 서버의 고유 식별자 및 이름, 범위, 리소스를 생성할 리전을 지정합니다.

    이 예제에서는 식별자와 이름으로 dcv-session-manager를 사용하고 범위 이름 및 설명으로 sm_scope를 사용합니다.

    $ aws cognito-idp create-resource-server --user-pool-id us-east-1_QLEXAMPLE --identifier dcv-session-manager --name dcv-session-manager --scopes ScopeName=sm_scope,ScopeDescription=sm_scope --region us-east-1

    출력 예

    { "ResourceServer": { "UserPoolId": "us-east-1_QLEXAMPLE", "Identifier": "dcv-session-manager", "Name": "dcv-session-manager", "Scopes": [ { "ScopeName": "sm_scope", "ScopeDescription": "sm_scope" }] } }
  5. 사용자 풀 클라이언트를 업데이트합니다.

    update-user-pool-client 명령을 사용합니다. 사용자 풀의 userPoolId, 사용자 풀 클라이언트의 ClientId, 리전을 지정합니다. --allowed-o-auth-flows의 경우 클라이언트 ID와 클라이언트 암호의 조합을 사용하여 클라이언트가 토큰 엔드포인트에서 액세스 토큰을 가져와야 한다는 것을 나타내도록 client_credentials를 지정합니다. --allowed-o-auth-scopes의 경우 다음과 같이 리소스 서버 식별자와 범위 이름을 resource_server_identifier/scope_name과 같이 지정합니다. 클라이언트가 Cognito 사용자 풀과 상호 작용할 때 OAuth 프로토콜을 따르도록 허용된다는 것을 나타내도록 --allowed-o-auth-flows-user-pool-client를 포함합니다.

    $ aws cognito-idp update-user-pool-client --user-pool-id us-east-1_QLEXAMPLE --client-id 2l9273hp6k2ut5cugg9EXAMPLE --allowed-o-auth-flows client_credentials --allowed-o-auth-scopes dcv-session-manager/sm_scope --allowed-o-auth-flows-user-pool-client --region us-east-1

    출력 예

    { "UserPoolClient": { "UserPoolId": "us-east-1_QLEXAMPLE", "ClientName": "dcv-session-manager-client-app", "ClientId": "2l9273hp6k2ut5cugg9EXAMPLE", "ClientSecret": "1vp5e8nec7cbf4m9me55mbmht91u61hlh0a78rq1qki1lEXAMPLE", "LastModifiedDate": 1602512103.099, "CreationDate": 1602510291.498, "RefreshTokenValidity": 30, "AllowedOAuthFlows": [ "client_credentials" ], "AllowedOAuthScopes": [ "dcv-session-manager/sm_scope" ], "AllowedOAuthFlowsUserPoolClient": true } }
    참고

    이제 사용자 풀에서 액세스 토큰을 제공하고 인증할 준비가 되었습니다. 이 예제에서 권한 부여 서버의 URL은 https://cognito-idp.us-east-1.amazonaws.com/us-east-1_QLEXAMPLE/.well-known/jwks.json입니다.

  6. 구성을 테스트합니다.

    $ curl -H "Authorization: Basic `echo -n 2l9273hp6k2ut5cugg9EXAMPLE:1vp5e8nec7cbf4m9me55mbmht91u61hlh0a78rq1qki1lEXAMPLE | base64`" -H "Content-Type: application/x-www-form-urlencoded" -X POST "https://mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE.auth.us-east-1.amazoncognito.com/oauth2/token?grant_type=client_credentials&scope=dcv-session-manager/sm_scope"

    출력 예

    { "access_token":"eyJraWQiOiJGQ0VaRFpJUUptT3NSaW41MmtqaDdEbTZYb0RnSTQ5b2VUT0cxUUI1Q2VJPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIybDkyNzNocDZrMnV0NWN1Z2c5dWg4ZGx0cCIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiZGN2LXNlc3Npb24tbWFuYWdlclwvcGVybWlzc2lvbnMiLCJhdXRoX3RpbWUiOjE2MDI1MTMyODMsImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbVwvdXMtd2VzdC0yX1FMZTA3SU9GViIsImV4cCI6MTYwMjUxNjg4MywiaWF0IjoxNjAyNTEzMjgzLCJ2ZXJzaW9uIjoyLCJqdGkiOiIyMDk2YTg4NS04YWQ0LTRmYjgtYjI2Mi1hMmNkNDk0OGZjNjYiLCJjbGllbnRfaWQiOiIybDkyNzNocDZrMnV0NWN1Z2c5dWg4ZGx0cCJ9.ZLZpS4CiiLq1X_VSm911hNT4g8A0FKZXScVJyyV0ijcyOfUOBcpgSMGqJagLYORFuYwLS5c7g4eO04wIwnw21ABGIDcOMElDPCJkrzjfLEPS_eyK3dNmlXDEvdS-Zkfi0HIDsd6audjTXKzHlZGScr6ROdZtId5dThkpEZiSx0YwiiWe9crAlqoazlDcCsUJHIXDtgKW64pSj3-uQQGg1Jv_tyVjhrA4JbD0k67WS2V9NW-uZ7t4zwwaUmOi3KzpBMi54fpVgPaewiVlUm_aS4LUFcWT6hVJjiZF7om7984qb2gOa14iZxpXPBJTZX_gtG9EtvnS9uW0QygTJRNgsw", "expires_in":3600, "token_type":"Bearer" }
  7. register-auth-server 명령을 사용하여 브로커와 함께 사용할 외부 권한 부여 서버를 등록합니다.

    $ sudo -u root dcv-session-manager-broker register-auth-server --url https://cognito-idp.us-east-1.amazonaws.com/us-east-1_QLEXAMPLE/.well-known/jwks.json

이제 개발자가 서버를 사용하여 액세스 토큰을 요청할 수 있습니다. 액세스 토큰을 요청할 때 여기에 생성된 클라이언트 ID, 클라이언트 암호 및 서버 URL을 제공하세요. 액세스 토큰 요청에 대한 자세한 내용은 NICE DCV 세션 관리자 개발자 안내서액세스 토큰 확보 및 API 요청을 참조하세요.