기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
2단계: 인증 코드가 첨부된 URL 생성
다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 대시보드 URL을 가져오는 방법을 알아볼 수 있습니다. IAM 또는 QuickSight 자격 증명 유형에 대한 대시보드를 내장하려는 경우 대시보드를 사용자와 공유하십시오.
사용자가 앱에 액세스할 때, 앱은 사용자를 대신하여 IAM 역할을 맡습니다. 그런 다음 해당 사용자가 아직 존재하지 않는 QuickSight 경우 사용자를 추가합니다. 다음으로 식별자를 고유한 역할 세션 ID로 전달합니다.
이 단계를 수행하면 대시보드의 각 뷰어가 고유하게 프로비전됩니다. QuickSight 또한 사용자 단위 설정(예: 파라미터에 대한 동적 기본값 및 행 수준 보안)을 적용합니다.
다음 예는 사용자를 대신하여 IAM 인증을 수행합니다. 이 코드는 앱 서버에서 실행됩니다.
- Java
-
import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.quicksight.AmazonQuickSight; import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder; import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserRequest; import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserResult; import com.amazonaws.services.quicksight.model.RegisteredUserEmbeddingExperienceConfiguration; import com.amazonaws.services.quicksight.model.RegisteredUserDashboardEmbeddingConfiguration; /** * Class to call QuickSight AWS SDK to get url for dashboard embedding. */ public class GetQuicksightEmbedUrlRegisteredUserDashboardEmbedding { private final AmazonQuickSight quickSightClient; public GetQuicksightEmbedUrlRegisteredUserDashboardEmbedding() { this.quickSightClient = AmazonQuickSightClientBuilder .standard() .withRegion(Regions.US_EAST_1.getName()) .withCredentials(new AWSCredentialsProvider() { @Override public AWSCredentials getCredentials() { // provide actual IAM access key and secret key here return new BasicAWSCredentials("access-key", "secret-key"); } @Override public void refresh() {} } ) .build(); } public String getQuicksightEmbedUrl( final String accountId, // AWS Account ID final String dashboardId, // Dashboard ID to embed final List<String> allowedDomains, // Runtime allowed domain for embedding final String userArn // Registered user arn to use for embedding. Refer to Get Embed Url section in developer portal to find out how to get user arn for a QuickSight user. ) throws Exception { final RegisteredUserEmbeddingExperienceConfiguration experienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration() .withDashboard(new RegisteredUserDashboardEmbeddingConfiguration().withInitialDashboardId(dashboardId)); final GenerateEmbedUrlForRegisteredUserRequest generateEmbedUrlForRegisteredUserRequest = new GenerateEmbedUrlForRegisteredUserRequest(); generateEmbedUrlForRegisteredUserRequest.setAwsAccountId(accountId); generateEmbedUrlForRegisteredUserRequest.setUserArn(userArn); generateEmbedUrlForRegisteredUserRequest.setAllowedDomains(allowedDomains); generateEmbedUrlForRegisteredUserRequest.setExperienceConfiguration(experienceConfiguration); final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest); return generateEmbedUrlForRegisteredUserResult.getEmbedUrl(); } }
- JavaScript
-
global.fetch = require('node-fetch'); const AWS = require('aws-sdk'); function generateEmbedUrlForRegisteredUser( accountId, dashboardId, openIdToken, // Cognito-based token userArn, // registered user arn roleArn, // IAM user role to use for embedding sessionName, // Session name for the roleArn assume role allowedDomains, // Runtime allowed domain for embedding getEmbedUrlCallback, // GetEmbedUrl success callback method errorCallback // GetEmbedUrl error callback method ) { const stsClient = new AWS.STS(); let stsParams = { RoleSessionName: sessionName, WebIdentityToken: openIdToken, RoleArn: roleArn } stsClient.assumeRoleWithWebIdentity(stsParams, function(err, data) { if (err) { console.log('Error assuming role'); console.log(err, err.stack); errorCallback(err); } else { const getDashboardParams = { "AwsAccountId": accountId, "ExperienceConfiguration": { "Dashboard": { "InitialDashboardId": dashboardId } }, "UserArn": userArn, "AllowedDomains": allowedDomains, "SessionLifetimeInMinutes": 600 }; const quicksightClient = new AWS.QuickSight({ region: process.env.AWS_REGION, credentials: { accessKeyId: data.Credentials.AccessKeyId, secretAccessKey: data.Credentials.SecretAccessKey, sessionToken: data.Credentials.SessionToken, expiration: data.Credentials.Expiration } }); quicksightClient.generateEmbedUrlForRegisteredUser(getDashboardParams, function(err, data) { if (err) { console.log(err, err.stack); errorCallback(err); } else { const result = { "statusCode": 200, "headers": { "Access-Control-Allow-Origin": "*", // Use your website domain to secure access to GetEmbedUrl API "Access-Control-Allow-Headers": "Content-Type" }, "body": JSON.stringify(data), "isBase64Encoded": false } getEmbedUrlCallback(result); } }); } }); }
- Python3
-
import json import boto3 from botocore.exceptions import ClientError sts = boto3.client('sts') # Function to generate embedded URL # accountId: AWS account ID # dashboardId: Dashboard ID to embed # userArn: arn of registered user # allowedDomains: Runtime allowed domain for embedding # roleArn: IAM user role to use for embedding # sessionName: session name for the roleArn assume role def getEmbeddingURL(accountId, dashboardId, userArn, allowedDomains, roleArn, sessionName): try: assumedRole = sts.assume_role( RoleArn = roleArn, RoleSessionName = sessionName, ) except ClientError as e: return "Error assuming role: " + str(e) else: assumedRoleSession = boto3.Session( aws_access_key_id = assumedRole['Credentials']['AccessKeyId'], aws_secret_access_key = assumedRole['Credentials']['SecretAccessKey'], aws_session_token = assumedRole['Credentials']['SessionToken'], ) try: quicksightClient = assumedRoleSession.client('quicksight', region_name='us-west-2') response = quicksightClient.generate_embed_url_for_registered_user( AwsAccountId=accountId, ExperienceConfiguration = { "Dashboard": { "InitialDashboardId": dashboardId } }, UserArn = userArn, AllowedDomains = allowedDomains, SessionLifetimeInMinutes = 600 ) return { 'statusCode': 200, 'headers': {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Content-Type"}, 'body': json.dumps(response), 'isBase64Encoded': bool('false') } except ClientError as e: return "Error generating embedding url: " + str(e)
- Node.js
-
다음 예제는 앱 서버에서 내장된 대시보드의 URL을 생성하는 데 사용할 수 있는 JavaScript (Node.js) 를 보여줍니다. 웹 사이트 또는 앱에서 이 URL을 사용하여 대시보드를 표시할 수 있습니다.
const AWS = require('aws-sdk'); const https = require('https'); var quicksightClient = new AWS.Service({ apiConfig: require('./quicksight-2018-04-01.min.json'), region: 'us-east-1', }); quicksightClient.generateEmbedUrlForRegisteredUser({ 'AwsAccountId': '111122223333', 'ExperienceConfiguration': { 'Dashboard': { 'InitialDashboardId': '1c1fe111-e2d2-3b30-44ef-a0e111111cde' } }, 'UserArn': 'REGISTERED_USER_ARN', 'AllowedDomains': allowedDomains, 'SessionLifetimeInMinutes': 100 }, function(err, data) { console.log('Errors: '); console.log(err); console.log('Response: '); console.log(data); });
//The URL returned is over 900 characters. For this example, we've shortened the string for //readability and added ellipsis to indicate that it's incomplete. { Status: 200, EmbedUrl: 'https://
quicksightdomain
/embed/12345/dashboards/67890...' RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' } - .NET/C#
-
다음 예제는 앱 서버에서 임베디드 대시보드에 대한 URL를 생성하는데 사용할 수 있는 .NET/C# 코드를 보여줍니다. 웹 사이트 또는 앱에서 이 URL을 사용하여 대시보드를 표시할 수 있습니다.
using System; using Amazon.QuickSight; using Amazon.QuickSight.Model; namespace GenerateDashboardEmbedUrlForRegisteredUser { class Program { static void Main(string[] args) { var quicksightClient = new AmazonQuickSightClient( AccessKey, SecretAccessKey, SessionToken, Amazon.RegionEndpoint.USEast1); try { RegisteredUserDashboardEmbeddingConfiguration registeredUserDashboardEmbeddingConfiguration = new RegisteredUserDashboardEmbeddingConfiguration { InitialDashboardId = "dashboardId" }; RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration { Dashboard = registeredUserDashboardEmbeddingConfiguration }; Console.WriteLine( quicksightClient.GenerateEmbedUrlForRegisteredUserAsync(new GenerateEmbedUrlForRegisteredUserRequest { AwsAccountId = "111122223333", ExperienceConfiguration = registeredUserEmbeddingExperienceConfiguration, UserArn = "REGISTERED_USER_ARN", AllowedDomains = allowedDomains, SessionLifetimeInMinutes = 100 }).Result.EmbedUrl ); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
- AWS CLI
-
역할을 맡으려면 다음 AWS Security Token Service (AWS STS) API 작업 중 하나를 선택하십시오.
-
AssumeRole— IAM ID를 사용하여 역할을 수임하는 경우 이 작업을 사용하십시오.
-
AssumeRoleWithWebIdentity— 웹 ID 공급자를 사용하여 사용자를 인증하는 경우 이 작업을 사용하십시오.
-
AssumeRoleWithSaml— SAML을 사용하여 사용자를 인증할 때 이 작업을 사용하십시오.
다음 예에서는 IAM 역할을 설정하는 CLI 명령을 보여줍니다. 역할은
quicksight:GenerateEmbedUrlForRegisteredUser
에 대한 권한이 활성화되어 있어야 합니다. 사용자가 대시보드를 처음 열 때 사용자를 추가하려는 경우 역할에 대한 권한도 활성화해야 합니다. just-in-timequicksight:RegisterUser
aws sts assume-role \ --role-arn "
arn:aws:iam::111122223333:role/embedding_quicksight_dashboard_role
" \ --role-session-namejohn.doe@example.com
assume-role
작업은 액세스 키, 보안 키 및 세션 토큰의 세 가지 출력 파라미터를 반환합니다.참고
AssumeRole
작업을 호출할 때ExpiredToken
오류가 발생할 경우, 이는 아마도 이전의SESSION TOKEN
이(가) 환경 변수에 남아 있기 때문입니다. 다음 변수를 설정하여 이를 삭제합니다.-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
-
AWS_SESSION_TOKEN
다음 예에서는 CLI에서 세 파라미터를 설정하는 방법을 보여줍니다. Microsoft Windows 컴퓨터를 사용하는 경우
export
대신set
을(를) 사용하십시오.export AWS_ACCESS_KEY_ID = "
access_key_from_assume_role
" export AWS_SECRET_ACCESS_KEY = "secret_key_from_assume_role
" export AWS_SESSION_TOKEN = "session_token_from_assume_role
"이러한 명령을 실행하여 웹 사이트를 방문하는 사용자의 역할 세션 ID를
embedding_quicksight_dashboard_role/john.doe@example.com
으로 설정합니다. 역할 세션 ID는role-arn
의 역할 이름과role-session-name
값으로 구성됩니다. 각 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 사용자 액세스 조절을 방지할 수 있습니다. 스로틀링은 동일한 사용자가 여러 위치에서 액세스하는 QuickSight 것을 방지하는 보안 기능입니다.또한 역할 세션 ID는 해당 사용자 이름이 됩니다. QuickSight 이 패턴을 사용하여 사용자를 QuickSight 미리 프로비전하거나 대시보드에 처음 액세스할 때 사용자를 프로비전할 수 있습니다.
다음 예에서는 사용자를 프로비저닝하는 데 사용할 수 있는 CLI 명령을 보여줍니다. RegisterUserDescribeUser, 및 기타 QuickSight API 작업에 대한 자세한 내용은 QuickSight API 참조를 참조하십시오.
aws quicksight register-user \ --aws-account-id
111122223333
\ --namespacedefault
\ --identity-typeIAM
\ --iam-arn "arn:aws:iam::111122223333:role/embedding_quicksight_dashboard_role
" \ --user-roleREADER
\ --user-namejhnd
\ --session-name "john.doe@example.com
" \ --emailjohn.doe@example.com
\ --regionus-east-1
\ --custom-permissions-nameTeamA1
사용자가 Microsoft AD를 통해 인증된 경우에는, 설정을 위해
RegisterUser
을(를) 사용하지 않아도 됩니다. 대신 처음 액세스할 QuickSight 때 자동으로 구독되어야 합니다. Microsoft AD 사용자의 경우 사용자 ARN을 얻는 데DescribeUser
를 사용할 수 있습니다.사용자가 처음 액세스할 QuickSight 때 대시보드를 공유하는 그룹에 이 사용자를 추가할 수도 있습니다. 다음 예에서는 사용자를 그룹에 추가하는 CLI 명령을 보여줍니다.
aws quicksight create-group-membership \ --aws-account-id=
111122223333
\ --namespace=default \ --group-name=financeusers
\ --member-name="embedding_quicksight_dashboard_role/john.doe@example.com
"이제 앱 사용자도 있고 대시보드에 액세스할 수 있는 앱 사용자가 생겼습니다. QuickSight
마지막으로 대시보드에 대해 서명된 URL을 가져오려면 앱 서버에서
generate-embed-url-for-registered-user
을 호출합니다. 그러면 임베드 가능한 대시보드 URL이 반환됩니다. 다음 예제는 Single Sign-On (IAM Identity Center) 을 통해 AWS Managed Microsoft AD 인증된 사용자에 대한 서버 측 호출을 사용하여 내장된 대시보드의 URL을 생성하는 방법을 보여줍니다.aws quicksight generate-embed-url-for-registered-user \ --aws-account-id
111122223333
\ --session-lifetime-in-minutes600
\ --user-arnarn:aws:quicksight:us-east-1:111122223333:user/default/embedding_quicksight_visual_role/embeddingsession
\ --allowed-domains '["domain1
","domain2
"]' \ --experience-configuration Dashboard={InitialDashboardId=1a1ac2b2-3fc3-4b44-5e5d-c6db6778df89
}이 작업의 사용에 대한 자세한 내용은 GenerateEmbedUrlForRegisteredUser 단원을 참조하세요. 자체 코드에서 이 작업 및 다른 API 작업을 사용할 수 있습니다.
-