我想我了解获取 AWS Quicksight 仪表板的嵌入 URL 所需的所有步骤,并且我已经能够通过 AWS CLI 获取有效的 URL,如AWS docs.
但是,我似乎无法通过 AWS Java SDK(特别是 v2)让它工作。似乎任何地方都没有一个好的例子。
有谁知道使用 Java(或 Groovy)最好使用 Spring Boot(或 Grails 3 或 4)的良好工作示例?
我终于弄明白了。这是一个工作Groovy/Grails 示例项目使用 AWS Java SDK v2 获取 Quicksight 仪表板 URL。
Summary
我遵循了 AWS 文档中流程大纲的修改版本,here。文档说让您的服务帐户承担用户的 IAM 角色,然后使用以下命令作为最终用户请求仪表板IdentityType.IAM
。但是,我发出了获取 url 作为服务帐户的请求,但没有假设用户的角色,并指定了最终用户的 ARN 和IdentityType.QUICKSIGHT
在 API 调用中。
Code (完整代码)
import software.amazon.awssdk.services.quicksight.QuickSightClient
import software.amazon.awssdk.services.quicksight.model.*
class ApplicationController {
String roleName = "embed-dashboard"
String namespace = "default"
String awsAccountId
String dashboardId
QuickSightClient quickSightClient
def index(String awsAccountId, String email, String dashboardId) {
//unimportant code removed
String url = fetchEmbedUrl(email)
render "<a href='$url' target='_blank'>Dashboard</a>"
}
private String fetchEmbedUrl(String email) {
// look up the user by email address
// if we don't find the user register them
User user = fetchUser(email) ?: registerUser(email)
// get the dashboard URL
String embedUrl = quickSightClient.getDashboardEmbedUrl(GetDashboardEmbedUrlRequest.builder()
.awsAccountId(awsAccountId)
.dashboardId(dashboardId)
.userArn(user.arn)
.identityType(IdentityType.QUICKSIGHT)
.sessionLifetimeInMinutes(600L)
.build()
).embedUrl
log.info("URL:\n$embedUrl")
return embedUrl
}
private User fetchUser(String email) {
return quickSightClient.listUsers(ListUsersRequest.builder()
.awsAccountId(awsAccountId)
.namespace(namespace)
.build()
).userList().find { it.email() == email }
}
private User registerUser(String email) {
String roleArn = "arn:aws:iam::$awsAccountId:role/$roleName"
return quickSightClient.registerUser(RegisterUserRequest.builder()
.awsAccountId(awsAccountId)
.namespace(namespace)
.identityType(IdentityType.IAM)
.iamArn(roleArn)
.userRole("READER")
.email(email)
.sessionName(email)
.build()
).user()
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)