Étape 2 : Obtenir l'URL avec le code d'authentification en pièce jointe
Important
Amazon QuickSight propose de nouvelles API pour l'intégration des analyses : GenerateEmbedUrlForAnonymousUser et GenerateEmbedUrlForRegisteredUser.
Vous pouvez toujours utiliser les API GetDashboardEmbedUrl et GetSessionEmbedUrl pour intégrer des tableaux de bord et la console QuickSight, mais elles ne contiennent pas les dernières fonctionnalités d'intégration. Pour obtenir la dernière mise à jour de l'expérience d'intégration, consultez la rubrique Intégration de l'analyse QuickSight dans vos applications.
Dans la section suivante, vous découvrirez comment authentifier votre utilisateur et obtenir l'URL de tableau de bord intégrable sur votre serveur d'applications.
Lorsqu'un utilisateur accède à votre application, l'application assume le rôle IAM pour le compte de l'utilisateur. Ensuite, elle ajoute l'utilisateur à QuickSight, si ce dernier n'existe pas déjà. Puis, elle transmet un identifiant comme ID de session de rôle unique.
L'exécution des étapes décrites garantit que chaque utilisateur du tableau de bord est provisionné de manière unique dans QuickSight. Elle applique également les paramètres par utilisateur, tels que les valeurs dynamiques et de sécurité par défaut au niveau des lignes pour les paramètres.
Les exemples suivants effectuent l'authentification IAM pour le compte de l'utilisateur. Ce code s'exécute sur votre serveur d'applications.
- Java
-
import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicSessionCredentials; 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.GetDashboardEmbedUrlRequest; import com.amazonaws.services.quicksight.model.GetDashboardEmbedUrlResult; import com.amazonaws.services.securitytoken.AWSSecurityTokenService; import com.amazonaws.services.securitytoken.model.AssumeRoleRequest; import com.amazonaws.services.securitytoken.model.AssumeRoleResult; /** * Class to call QuickSight AWS SDK to get url for dashboard embedding. */ public class GetQuicksightEmbedUrlIAMAuth { private static String IAM = "IAM"; private final AmazonQuickSight quickSightClient; private final AWSSecurityTokenService awsSecurityTokenService; public GetQuicksightEmbedUrlIAMAuth(final AWSSecurityTokenService awsSecurityTokenService) { 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(); this.awsSecurityTokenService = awsSecurityTokenService; } public String getQuicksightEmbedUrl( final String accountId, // YOUR AWS ACCOUNT ID final String dashboardId, // YOUR DASHBOARD ID TO EMBED final String openIdToken, // TOKEN TO ASSUME ROLE WITH ROLEARN final String roleArn, // IAM USER ROLE TO USE FOR EMBEDDING final String sessionName, // SESSION NAME FOR THE ROLEARN ASSUME ROLE final boolean resetDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD final boolean undoRedoDisabled // OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD ) throws Exception { AssumeRoleRequest request = new AssumeRoleRequest() .withRoleArn(roleArn) .withRoleSessionName(sessionName) .withTokenCode(openIdToken) .withDurationSeconds(3600); AssumeRoleResult assumeRoleResult = awsSecurityTokenService.assumeRole(request); AWSCredentials temporaryCredentials = new BasicSessionCredentials( assumeRoleResult.getCredentials().getAccessKeyId(), assumeRoleResult.getCredentials().getSecretAccessKey(), assumeRoleResult.getCredentials().getSessionToken()); AWSStaticCredentialsProvider awsStaticCredentialsProvider = new AWSStaticCredentialsProvider(temporaryCredentials); GetDashboardEmbedUrlRequest getDashboardEmbedUrlRequest = new GetDashboardEmbedUrlRequest() .withDashboardId(dashboardId) .withAwsAccountId(accountId) .withIdentityType(IAM) .withResetDisabled(resetDisabled) .withUndoRedoDisabled(undoRedoDisabled) .withRequestCredentialsProvider(awsStaticCredentialsProvider); GetDashboardEmbedUrlResult dashboardEmbedUrl = quickSightClient.getDashboardEmbedUrl(getDashboardEmbedUrlRequest); return dashboardEmbedUrl.getEmbedUrl(); } } - JavaScript
-
global.fetch = require('node-fetch'); const AWS = require('aws-sdk'); function getDashboardEmbedURL( accountId, // YOUR AWS ACCOUNT ID dashboardId, // YOUR DASHBOARD ID TO EMBED openIdToken, // TOKEN TO ASSUME ROLE WITH ROLEARN roleArn, // IAM USER ROLE TO USE FOR EMBEDDING sessionName, // SESSION NAME FOR THE ROLEARN ASSUME ROLE resetDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD undoRedoDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD 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, DashboardId: dashboardId, IdentityType: 'IAM', ResetDisabled: resetDisabled, SessionLifetimeInMinutes: 600, UndoRedoDisabled: undoRedoDisabled }; const quicksightGetDashboard = 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 } }); quicksightGetDashboard.getDashboardEmbedUrl(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 # Create QuickSight and STS clients qs = boto3.client('quicksight',region_name='us-east-1') sts = boto3.client('sts') # Function to generate embedded URL # accountId: YOUR AWS ACCOUNT ID # dashboardId: YOUR DASHBOARD ID TO EMBED # openIdToken: TOKEN TO ASSUME ROLE WITH ROLEARN # roleArn: IAM USER ROLE TO USE FOR EMBEDDING # sessionName: SESSION NAME FOR THE ROLEARN ASSUME ROLE # resetDisabled: PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD # undoRedoDisabled: PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD def getDashboardURL(accountId, dashboardId, openIdToken, roleArn, sessionName, resetDisabled, undoRedoDisabled): try: assumedRole = sts.assume_role( RoleArn = roleArn, RoleSessionName = sessionName, WebIdentityToken = openIdToken ) 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: quickSight = assumedRoleSession.client('quicksight',region_name='us-east-1') response = quickSight.get_dashboard_embed_url( AwsAccountId = accountId, DashboardId = dashboardId, IdentityType = 'IAM', SessionLifetimeInMinutes = 600, UndoRedoDisabled = undoRedoDisabled, ResetDisabled = resetDisabled ) 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 embeddedURL: " + str(e) - Node.js
-
L'exemple suivant montre le code JavaScript (Node.js) que vous pouvez utiliser sur le serveur d'applications afin d'obtenir l'URL pour le tableau de bord intégré. Vous pouvez utiliser cette URL dans votre site Web ou votre application pour afficher le tableau de bord.
const AWS = require('aws-sdk'); const https = require('https'); var quicksight = new AWS.Service({ apiConfig: require('./quicksight-2018-04-01.min.json'), region: 'us-east-1', }); quicksight.getDashboardEmbedUrl({ 'AwsAccountId': '111122223333', 'DashboardId': '1c1fe111-e2d2-3b30-44ef-a0e111111cde', 'IdentityType': 'IAM', 'ResetDisabled': true, 'SessionLifetimeInMinutes': 100, 'UndoRedoDisabled': false, 'StatePersistenceEnabled': true }, 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://dashboards.example.com/embed/620bef10822743fab329fb3751187d2d… RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' } - .NET/C#
-
L'exemple suivant montre le code .NET/C # que vous pouvez utiliser sur le serveur d'applications afin d'obtenir l'URL pour le tableau de bord intégré. Vous pouvez utiliser cette URL dans votre site Web ou votre application pour afficher le tableau de bord.
var client = new AmazonQuickSightClient( AccessKey, SecretAccessKey, sessionToken, Amazon.RegionEndpoint.USEast1); try { Console.WriteLine( client.GetDashboardEmbedUrlAsync(new GetDashboardEmbedUrlRequest { AwsAccountId = “111122223333”, DashboardId ="1c1fe111-e2d2-3b30-44ef-a0e111111cde", IdentityType = EmbeddingIdentityType.IAM, ResetDisabled = true, SessionLifetimeInMinutes = 100, UndoRedoDisabled = false, StatePersistenceEnabled = true }).Result.EmbedUrl ); } catch (Exception ex) { Console.WriteLine(ex.Message); } - AWS CLI
-
Pour assumer le rôle, choisissez l'une des opérations d'API AWS Security Token Service (AWS STS) suivantes :
-
AssumeRole : utilisez cette opération lorsque vous utilisez une identité IAM pour assumer le rôle.
-
AssumeRoleWithWebIdentity : utilisez cette opération lorsque vous utilisez un fournisseur d'identités web pour authentifier votre utilisateur.
-
AssumeRoleWithSaml : utilisez cette opération lorsque vous utilisez le langage SAML pour authentifier vos utilisateurs.
L'exemple suivant illustre la commande de l'interface de ligne de commande pour définir le rôle IAM. Les autorisations doivent être activées pour
quicksight:GetDashboardEmbedURL. Si vous adoptez une approche juste à temps pour ajouter des utilisateurs lorsqu'ils ouvrent un tableau de bord pour la première fois, les autorisations doivent également être activées pourquicksight:RegisterUser.aws sts assume-role \ --role-arn "arn:aws:iam::111122223333:role/embedding_quicksight_dashboard_role" \ --role-session-namejohn.doe@example.comL'opération
assume-rolerenvoie trois paramètres de sortie : la clé d'accès, la clé secrète et le jeton de session.Note
Si vous obtenez une erreur
ExpiredTokenlorsque vous appelez l'opérationAssumeRole, ceci est probablement dû au fait que le précédentSESSION TOKENest encore dans les variables de l'environnement. Pour l'effacer, définissez les variables suivantes :-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
-
AWS_SESSION_TOKEN
L'exemple suivant montre comment définir ces trois paramètres dans l'interface de ligne de commande. Si vous utilisez une machine Microsoft Windows, utilisez
setau lieu deexport.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"L'exécution de ces commandes définit l'ID de session de rôle de l'utilisateur visitant votre site web sur
embedding_quicksight_dashboard_role/john.doe@example.com. L'ID de session de rôle se compose du nom de rôle issu durole-arnet de la valeurrole-session-name. L'utilisation de l'ID de session de rôle unique pour chaque utilisateur garantit que les autorisations appropriées sont définies pour chaque utilisateur. Ceci évite également toute limitation des accès des utilisateurs. La limitation est une fonctionnalité de sécurité qui empêche à un même utilisateur d'accéder à QuickSight depuis différents endroits.L'ID de session de rôle devient également le nom d'utilisateur dans QuickSight. Vous pouvez utiliser ce modèle pour provisionner vos utilisateurs dans QuickSight à l'avance, ou pour les provisionner la première fois qu'ils accèdent au tableau de bord.
L'exemple suivant montre la commande de l'interface de ligne de commande que vous pouvez utiliser pour provisionner un utilisateur. Pour plus d'informations sur RegisterUser (français non garanti), DescribeUser (français non garanti) et les autres opérations d'API QuickSight, consultez la Référence d'API Amazon QuickSight (français non garanti).
aws quicksight register-user \ --aws-account-id111122223333\ --namespace default \ --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-nameTeamA1Si l'utilisateur est authentifié via Microsoft AD, vous n'avez pas besoin d'utiliser
RegisterUserpour le configurer. Au lieu de cela, il doit être automatiquement abonné la première fois qu'il accède à QuickSight. Pour les utilisateurs Microsoft AD, vous pouvez utiliserDescribeUserpour obtenir l'ARN de l'utilisateur.La première fois qu'un utilisateur accède à QuickSight, vous pouvez également ajouter cet utilisateur au groupe avec lequel le tableau de bord est partagé. L'exemple suivant montre la commande de l'interface de ligne de commande pour ajouter un utilisateur à un groupe.
aws quicksight create-group-membership \ --aws-account-id=111122223333\ --namespace=default \ --group-name=financeusers\ --member-name="embedding_quicksight_dashboard_role/john.doe@example.com"Vous avez maintenant un utilisateur de votre application qui est également un utilisateur de QuickSight et qui a accès au tableau de bord.
Enfin, pour obtenir une URL signée pour le tableau de bord, appelez
get-dashboard-embed-urlà partir du serveur d'applications. Ceci renvoie l'URL du tableau de bord intégrable. L'exemple suivant indique comment obtenir l'URL d'un tableau de bord intégré à l'aide d'un appel côté serveur pour les utilisateurs authentifiés à l'aide de AWS Managed Microsoft AD ou de IAM Identity Center.aws quicksight get-dashboard-embed-url \ --aws-account-id111122223333\ --dashboard-id1a1ac2b2-3fc3-4b44-5e5d-c6db6778df89\ --identity-typeIAM\ --session-lifetime-in-minutes30\ --undo-redo-disabledtrue\ --reset-disabledtrue\ --state-persistence-enabledtrue\ --user-arn arn:aws:quicksight:us-east-1:111122223333:user/default/embedding_quicksight_dashboard_role/embeddingsessionPour de plus amples informations sur l'utilisation de cette opération, veuillez consulter GetDashboardEmbedUrl. Vous pouvez utiliser cette opération et d'autres opérations d'API dans votre propre code.
-