0

我正在尝试将 QuickSight 仪表板嵌入到我的 django 应用程序中。我遵循了以下文档中详细介绍的有关嵌入的所有步骤: https ://docs.aws.amazon.com/en_us/quicksight/latest/user/embedded-dashboards-setup.html

使用 AWS CLI,我能够代入我创建的 IAM 角色,将用户注册到我的 QS 账户,并获取仪表板嵌入 URL,并在 Web 浏览器中查看仪表板。

但是,当尝试使用 Python SDK 在应用程序内部模拟相同的行为时,会产生以下信息:“我们无法显示此页面(未授权)。”

我们已在 Quicksight 中将我们的域列入白名单,并在 2 个不同的服务器上对其进行了测试。登录到 django 应用程序并尝试查看仪表板的用户已经在 QS 帐户中,具有查看仪表板的必要权限。但仍然收到“我们无法显示此页面(未授权)”。

Python SDK的使用如下:

def viewDashboard(请求):

import boto3
sts = boto3.client('sts')

assumed_role_object = sts.assume_role(
    RoleArn="arn:aws:iam::********4324:role/QuickSightEmbed",
    RoleSessionName=email
)

# From the response that contains the assumed role, get the temporary
# credentials that can be used to make subsequent API calls
credentials = assumed_role_object['Credentials']

# Use the temporary credentials that AssumeRole returns to make a
# connection to Amazon S3
s3_resource = boto3.resource(
    's3',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
)

client = boto3.client('quicksight', region_name='us-east-1')

response = client.register_user(
    IdentityType='IAM',
    Email=email,
    UserRole='READER',
    IamArn='arn:aws:iam::********4324:role/QuickSightEmbed',
    SessionName=email,
    AwsAccountId='********4324',
    Namespace='default',
)

client = boto3.client('quicksight', region_name='us-west-2')
url = client.get_dashboard_embed_url(
    AwsAccountId="********4324",
    DashboardId="4ea*****-8f**-46**-98**-389e43f*****",
    IdentityType="IAM",
)

然后将此 url 作为要嵌入的 url 传递给 HTML。

4

3 回答 3

0

我有同样的问题。我得到了网址,但无法嵌入仪表板。确保您获得的网址格式正确。然后,我建议您从视图中生成一个 getDashboardUrl () 函数,然后从接收请求的方法中调用该函数,并将其作为上下文传递给模板。在模板中,使用 html iframe 标记。不推荐使用 boto3 函数。因为它有cookie处理问题。

尝试以下操作:

在视图中:

def getDashboardURL():
    sts = boto3.client('sts', region_name=region, 
    aws_access_key_id = aws_access_key_id, 
    aws_secret_access_key = aws_secret_access_key)
    assumedRole = sts.assume_role(
               RoleArn = roleArn,
               RoleSessionName=sessionName,
               )
    assumedRoleSession = boto3.Session(
        aws_access_key_id = assumedRole['Credentials']['AccessKeyId'],
        aws_secret_access_key = assumedRole['Credentials']['SecretAccessKey'],
        aws_session_token = assumedRole['Credentials']['SessionToken'],
    )

    quickSight = assumedRoleSession.client(
            'quicksight', region_name=region)

    response = quickSight.get_dashboard_embed_url(
        AwsAccountId = accountId,
        DashboardId = dashboardId,
        IdentityType = 'QUICKSIGHT',
        SessionLifetimeInMinutes = 600,
        UndoRedoDisabled = True,
        ResetDisabled = True,
        UserArn = 'here your user quicksight ARN'
    )
    return response['EmbedUrl']

def dashboard(request):
    url = getDashboardURL()
    context = {
        'dash_url': url
     }
    return render(request, 'dashboard.html', context)

在模板仪表板中:

<div>
    <iframe src="{{ dash_url }}" title="Dashboard" class="container> </iframe>
</div>
于 2021-09-12T23:17:08.313 回答
0

您正在另一个地区注册用户:

client = boto3.client('quicksight', region_name=' us-east-1 ')

于 2020-08-25T03:09:46.043 回答
0

用户注册后,您需要与用户共享该仪表板。

于 2020-01-02T15:32:21.583 回答