Comment configurer l'accès entre comptes à l'aide de modèles dans Amazon QuickSight ?

Date de la dernière mise à jour : 16/07/2021

Je souhaite partager mon tableau de bord ou mon modèle avec un autre compte AWS dans Amazon QuickSight. Comment faire ?

Brève description

Remarque : cet article décrit les étapes d'accès entre comptes à l'aide d'AWS Command Line Interface (AWS CLI). Si vous recevez des erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous que vous utilisez la version d'AWS CLI la plus récente.

Pour fournir un accès entre comptes aux jeux de données et aux tableaux de bord dans Amazon QuickSight, effectuez les opérations suivantes :

1.    Créez un modèle dans le compte A à partir d'analyses existantes.

2.    Créez un jeu de données dans le compte B (comme le jeu de données dans le compte A).

3.    Créez un deuxième modèle dans le compte B à partir du modèle existant dans le compte A.

4.    Créez un tableau de bord dans le compte B à partir du modèle du compte B.

Important : assurez-vous de spécifier les autorisations de lecture appropriées à partir du compte source. Une fois les autorisations adéquates établies, vous pouvez créer ou partager un tableau de bord à partir d'un modèle dans un autre compte AWS.

Résolution

Création d'un modèle dans le compte A à partir d'analyses existantes

1.    Dans le compte A, créez un modèle (templateA.json) dans la région AWS et le compte AWS où réside votre analyse :

aws quicksight create-template --aws-account-id <Account_A> --template-id <Any-name> --cli-input-json file://templateA.json

Important : vous ne pouvez pas créer de modèles qui utilisent des ressources interrégionales.

Par exemple :

{
  "AwsAccountId": "<Account_A>",
  "TemplateId": "<Any-name>",
  "Name": "<Any-name>",
  "SourceEntity": {
    "SourceAnalysis": {
      "Arn": "arn:aws:quicksight:<region>:<Account_A>:analysis/<analysis-id>",
      "DataSetReferences": [
        {
          "DataSetPlaceholder": "<Any name>",
          "DataSetArn": "arn:aws:quicksight:<aws-region>:<Account_A>:dataset/<dataset-id>"
        }
      ]
    }
  },
  "VersionDescription": "1"
}

2.    Vérifiez que le modèle a été créé :

aws quicksight describe-template --aws-account-id <Account_A> --template-id <template-id>

3.    Mettez à jour les autorisations du modèle (TemplatePermission.json) pour accorder l'accès au compte B :

aws quicksight update-template-permissions --aws-account-id <Account_A> --template-id <template-id> --grant-permissions file://TemplatePermission.json

Par exemple :

[
  {
    "Principal": "arn:aws:iam::<Account_B>:root",
    "Actions": [
      "quicksight:UpdateTemplatePermissions",
      "quicksight:DescribeTemplate"
    ]
  }
]

Création d'un jeu de données dans le compte B (comme le jeu de données dans le compte A)

1.    Dans le compte B, créez un jeu de données (datasetB.json) en utilisant le même schéma que le jeu de données dans le compte A :

aws quicksight create-data-set --aws-account-id <Account_B> --dataset-id <Any-name> --cli-input-json file://datasetB.json

Par exemple :

{
  "AwsAccountId": "<Account_B>",
  "DataSetId": "<Any-name>",
  "Name": "<Any-name>",
  "PhysicalTableMap": {
    "Physicaltablename": {
      "RelationalTable": {
        "DataSourceArn": "arn:aws:quicksight:<region>:<Account_B>:datasource/<datasource-id>",
        "Schema": "<schema-name",
        "Name": "<table-name>",
        "InputColumns": [
          {
            "Name": "<column-name>",
            "Type": "STRING"|"INTEGER"|"DECIMAL"|"DATETIME"|"BIT"|"BOOLEAN"|"JSON"
          }
        ]
      }
    }
  },
  "LogicalTableMap": {
    "Logicaltablename": {
      "Alias": "<Any-alias>",
      "DataTransforms": [
        {
          "ProjectOperation": {
            "ProjectedColumns": [
              "<column-name>",>  "<column-name>"
            ]
          } 
        }
      ],
      "Source": {
        "PhysicalTableId": "Physicaltablename"
      }
    }
  },
  "ImportMode": "SPICE",
  "Permissions": [
    {
      "Principal": "arn:aws:quicksight:<region>:<Account_B>:user/<namespace>/<user-name>",
      "Actions": [
        "quicksight:UpdateDataSetPermissions",
        "quicksight:DescribeDataSet",
        "quicksight:DescribeDataSetPermissions",
        "quicksight:PassDataSet",
        "quicksight:DescribeIngestion",
        "quicksight:ListIngestions",
        "quicksight:UpdateDataSet",
        "quicksight:DeleteDataSet",
        "quicksight:CreateIngestion",
        "quicksight:CancelIngestion"
      ]
    }
  ]
}

Remarque : Cet exemple fait référence à un jeu de données SPICE.

2.    Vérifiez que le jeu de données a bien été créé :

aws quicksight describe-data-set --aws-account-id <Account_B> --data-set-id <dataset-id>

3.    Enregistrez l'ARN du jeu de données à partir de la sortie renvoyée. Vous aurez besoin de l'ARN du jeu de données pour une étape ultérieure.

Création d'un modèle dans le compte B à partir du modèle existant dans le compte A

1.    Confirmez que votre utilisateur ou votre rôle AWS Identity Access Management (IAM) dispose des autorisations appropriées. Vous devez disposer des autorisations suivantes pour accéder à un modèle entre comptes dans Amazon QuickSight :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": "arn:aws:quicksight:<region>:<Account_A>:template/<template-id>",
      "Action": "quicksight:DescribeTemplate"
    },
    {
      "Effect": "Allow",
      "Resource": "*",
      "Action": "quicksight:CreateTemplate"
    }
  ]
}

2.    Créez un nouveau modèle dans le compte B (templateB.json) à partir du modèle du compte A :

aws quicksight create-template --aws-account-id <Account_B> --template-id <Any-name> --source-entity file://templateB.json

Par exemple :

{
   "SourceTemplate": {
    "Arn": "arn:aws:quicksight:<region>:<Account_A>:template/<template-id>"
 }

3.    Confirmez que le modèle est créé :

aws quicksight describe-template --aws-account-id <Account_B> --template-id <template-id>

Création d'un tableau de bord dans le compte B à partir du modèle dans le compte B

1.    Créez un tableau de bord (dashboardB.json) à partir du modèle nouvellement créé dans le compte B :

aws quicksight create-dashboard --aws-account-id <Account_B> --dashboard-id <Any-name> --name <Any-name> --source-entity file://dashboardB.json

Par exemple :

{
  "SourceTemplate": {
    "DataSetReferences": [
      {
        "DataSetPlaceholder": "<placeholder-name>",
        "DataSetArn": "arn:aws:quicksight:<region>:<Account_B>:dataset/<dataset-id>"
      }
    ],
    "Arn": "arn:aws:quicksight:<region>:<Account_B>:template/<template-id>"
  }
}

Remarque : mettez à jour la variable DatasetPlaceholder avec le nom de l'espace réservé fourni avec le modèle créé dans le compte A (templateA.json). Mettez à jour la variable DataSetARN avec l'ARN du jeu de données que vous avez créé dans le compte B (datasetB.json).

2.    Confirmez que le tableau de bord a bien été créé :

aws quicksight describe-dashboard --aws-account-id <Account_B> --dashboard-id <dashboard-id>

3.    Accordez les autorisations appropriées (DashboardPermission.json) aux utilisateurs qui doivent accéder au tableau de bord Amazon QuickSight :

aws quicksight update-dashboard-permissions--aws-account-id <Account_B> --dashboard-id <dashboard-id> --grant-permissions file://DashboardPermission.json

Dans cet exemple, l'utilisateur Amazon QuickSight se voit accorder un accès de copropriétaire au tableau de bord :

[
  {
    "Principal": "arn:aws:quicksight:<region>:<Account_B>:user/<namespace>/<quicksight-user-name>",
    "Actions": [
      "quicksight:DescribeDashboard",
      "quicksight:ListDashboardVersions",
      "quicksight:UpdateDashboardPermissions",
      "quicksight:QueryDashboard",
      "quicksight:UpdateDashboard",
      "quicksight:DeleteDashboard",
      "quicksight:DescribeDashboardPermissions",
      "quicksight:UpdateDashboardPublishedVersion"
    ]
  }
]

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?