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