設定外部授權伺服器 - Amazon DCV Session Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定外部授權伺服器

授權伺服器是負責驗證和授權用戶端 SDKs 和代理程式的伺服器。

根據預設,Session Manager 會使用代理程式做為授權伺服器,為用戶端 SDK 產生 OAuth 2.0 存取權杖,以及為代理程式產生軟體陳述式。 SDKs 如果您使用代理程式做為授權伺服器,則不需要額外的組態。

您可以設定 Session Manager 使用 Amazon Cognito 做為外部授權伺服器,而非代理程式。如需 Amazon Cognito 的詳細資訊,請參閱 Amazon Cognito 開發人員指南

使用 Amazon Cognito 做為授權伺服器
  1. 建立新的 Amazon Cognito 使用者集區。如需使用者集區的詳細資訊,請參閱《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,指定 client_credentials以指出用戶端應該使用用戶端 ID 和用戶端秘密的組合,從字符端點取得存取權杖。對於 --allowed-o-auth-scopes,指定資源伺服器識別符和範圍名稱,如下所示:resource_server_identifier/scope_name。包含 ,--allowed-o-auth-flows-user-pool-client表示用戶端在與 Cognito 使用者集區互動時,可以遵循 OAuth 通訊協定。

    $ 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。如需請求存取權杖的詳細資訊,請參閱《Amazon DCV Session Manager 開發人員指南》中的建立取得存取權杖和提出 API 請求