【问题标题】:Error while embedding Amazon QuickSight dashboards with Django使用 Django 嵌入 Amazon QuickSight 控制面板时出错
【发布时间】:2020-03-31 18:12:20
【问题描述】:

我正在尝试将 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。

【问题讨论】:

    标签: python django amazon-iam amazon-quicksight quicksight-embedding


    【解决方案1】:

    我遇到了同样的问题。我得到了网址,但无法嵌入仪表板。确保您获得的网址格式正确。然后,我建议您从视图中生成一个 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>
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 您可以像这样创建一个组成员资格 client.create_group_membership ( MemberName= session_name, GroupName=group_name AwsAccountId = account_id, Namespace='default' ) 然后在 quicksight 中与组名共享仪表板。
        猜你喜欢
        • 2019-06-09
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 2012-12-29
        相关资源
        最近更新 更多