AWS IAM / QuickSight - пользователь не авторизован для выполнения: quicksight: GetDashboardEmbedUrl на ресурсе - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь использовать встроенную функцию URL панели мониторинга QuickSight в моем проекте ASP.NET MVC.Для тестирования я просто пытаюсь вывести встраиваемый URL в строку.Вот основная часть моего кода:

    var awsCredentials = new BasicAWSCredentials("redacted", "redacted");

    AmazonSecurityTokenServiceClient stsClient = new AmazonSecurityTokenServiceClient(awsCredentials);
    var tokenServiceRequest = stsClient.GetSessionToken();

    var client = new AmazonQuickSightClient(
        tokenServiceRequest.Credentials.AccessKeyId,
        tokenServiceRequest.Credentials.SecretAccessKey,
        tokenServiceRequest.Credentials.SessionToken,
        Amazon.RegionEndpoint.APSoutheast2);
    try
    {
        string machineTypeEmbedUrl =
            client.GetDashboardEmbedUrlAsync(new GetDashboardEmbedUrlRequest
            {
                AwsAccountId = "redacted",
                DashboardId = "redacted",
                IdentityType = IdentityType.IAM,
                ResetDisabled = true,
                SessionLifetimeInMinutes = 100,
                UndoRedoDisabled = false
            }).Result.EmbedUrl;
    }
    catch (Exception ex)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest,ex.Message);
    }

Для поддержки необходимых разрешений я настроил пользователя IAM с допустимой ролью STS следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1551593192075",
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iam::redacted:role/assume-quicksight-role"
        }
    ]
}

Я настроил указанную выше роль со следующими разрешениями и настроил ее политику доверия, чтобы вышеупомянутый пользователь IAM мог ее принять.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "quicksight:RegisterUser",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "quicksight:GetDashboardEmbedUrl",
            "Resource": "arn:aws:quicksight:ap-southeast-2:redacted:dashboard/redacted",
            "Effect": "Allow"
        }
    ]
}

Так что, насколько я могу судить, это должно работать.Отладка показывает, что я получаю токен сеанса, который передается в запрос embedUrl, однако я получаю следующую ошибку:

InnerException = {"Пользователь: arn: aws: iam ::: user / api-Пользователь dev-quicksight не авторизован для выполнения: quicksight: GetDashboardEmbedUrl на ресурсе: arn: aws: quicksight: ap-southeast-2 :: dashboard / "}

Я не уверен, почему этопроисходит?У меня есть пользователь, который может взять на себя правильную роль, и эта роль имеет необходимые разрешения для данной панели мониторинга.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 03 марта 2019

Попробуйте изменить свою роль следующим образом (обратите внимание на двойное двоеточие :: перед dashboard):

...
"Action": "quicksight:GetDashboardEmbedUrl", 
"Resource": "arn:aws:quicksight:ap-southeast-2::dashboard/*", 
"Effect": "Allow"
...

Это должно позволить пользователю получить доступ ко всем подресурсам под панелью инструментов.

Чтобы следовать принципу Least Privilege , рекомендованному AWS, вы должны перечислить все свои ресурсы:

...
"Resource": [
    "arn:aws:quicksight:ap-southeast-2::dashboard/", 
    "arn:aws:quicksight:ap-southeast-2::dashboard/redacted"]
... 
...