Ошибка кода авторизации интеграции AWS QuickSight rails

#ruby-on-rails #amazon-s3 #amazon-quicksight

#ruby-on-rails #amazon-s3 #amazon-QuickSight

Вопрос:

У меня есть приложение rails, в которое необходимо добавить QuickSight. Обнаружено, что для этих целей необходимо использовать get_dashboard_embed_url метод. Этот метод возвращает мне URL-адрес, но следует за ним (вручную, через тег iframe) Я получаю этот текст ошибки
Сбой внедрения из-за неверного URL или кода авторизации. Оба из них должны быть действительными, и срок действия кода авторизации не должен истекать, чтобы внедрение работало.

Где я могу найти код аутентификации? Как я могу это получить? Спасибо за вашу помощь
, вот как я извлекаю URL-адрес

 credential_options = {
  client: Aws::STS::Client.new(region: ENV['AWS_REGION']),
  role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
  role_session_name: self.user_email
}

assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
qs_client = Aws::QuickSight::Client.new({
  credentials: assume_role_credential,
  region: ENV['AWS_REGION']
})

begin
  qs_client.register_user({
    identity_type: 'IAM', # accepts IAM, QUICKSIGHT
    email: self.user_email,
    user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
    iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
    session_name: self.user,
    aws_account_id: ENV['AWS_ACCOUNT_ID'],
    namespace: 'default'
  })
rescue
end

options = {
  aws_account_id: ENV['AWS_ACCOUNT_ID'],
  dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
  identity_type: 'IAM',
  session_lifetime_in_minutes: 300,
  undo_redo_disabled: false,
  reset_disabled: false
}

qs_client.get_dashboard_embed_url(options, {}).embed_url
  

И как я пытаюсь отобразить
iframe src=@url class='w-100 h-100' style='min-height: 500px;'

Ответ №1:

Сначала извините за мой слабый английский, но я надеюсь, что вы поймете, что я имею
в виду. Хорошо, после выполнения этих пунктов у меня все начало работать. Также прочитайте «Подводные камни», это очень важный список пунктов, который сэкономит вам кучу времени

  • Замените мой код, о котором идет речь, на этот

     def fetch_url # this method fetch embed dashboard url
       credential_options = {
         client: Aws::STS::Client.new(
           region: ENV['AWS_REGION'],
           access_key_id: ENV['AWS_ACCESS_KEY_ID'],
           secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
         ),
         role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
         role_session_name: self.user_email # This is attr_accessor :user_email
       }
    
       assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
       qs_client = Aws::QuickSight::Client.new({
         credentials: assume_role_credential,
         region: ENV['AWS_REGION']
       })
    
       begin
         qs_client.register_user({
           identity_type: 'IAM', # accepts IAM, QUICKSIGHT
           email: self.user_email,
           user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
           iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
           session_name: self.user_email,
           aws_account_id: 'ENV['AWS_ACCOUNT_ID']',
           namespace: 'default'
         })
       rescue
       end
    
       options = {
         aws_account_id: ENV['AWS_ACCOUNT_ID'],
         dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
         identity_type: 'IAM',
         session_lifetime_in_minutes: 300,
         undo_redo_disabled: false,
         reset_disabled: false
       }
    
       qs_client.get_dashboard_embed_url(options).embed_url
     end
      
  • Перейдите в панель управления QuickSight https://your-quicksight-region(us-east-2 for example).quicksight.aws.amazon.com/sn/admin#users и нажмите кнопку «Управление разрешениями» (кнопка расположена над таблицей с пользователями)

  • На новой странице нажмите кнопку «Создать» и установите флажок «Совместное использование панелей мониторинга». Задайте имя разрешения, нажмите на кнопку «Создать»

  • В вашем действии контроллера: @url = fetch_url # fetch_url - method from 1 point

  • iframe src=@url Добавьте в свой вид: ИЛИ вы можете использовать amazon-quicksight-embedding-sdk, но для меня iframe работает довольно хорошо

Подводные скалы

  • Помните, что URL панели мониторинга (который вы получаете с помощью этого метода qs_client.get_dashboard_embed_url(options).embed_url ) можно использовать только один раз, т. Е. Вы не можете открыть две вкладки браузера с одним и тем же URL. Когда вы передадите этот URL iframe -адрес, этот URL-адрес перестанет работать, и вы больше не сможете использовать его в других окнах браузера или других iframe

  • Добавьте домен вашего приложения в белый список доменов в QuickSight. Вы можете сделать это на панели Управления QuickSight https://your-quicksight-region.quicksight.aws.amazon.com/sn/admin#embedding

  • !!! ВАЖНО!!! localhost:your_server_port_number если вы пытаетесь встроить панель мониторинга на свой iframe сервер rails, вы всегда будете получать сообщение об ошибке в iframe (но если вы перейдете по этому URL-адресу через адресную строку браузера, тогда вы должны увидеть свою панель мониторинга (закомментируйте / удалите, чтобы она не использовала ссылку, потому что каждыйURL встроенной панели мониторинга является одноразовым)). Это связано localhost:your_server_port_number с тем, что он не указан в белом списке (Подводные камни, стр.2). Для решения этой проблемы и тестирования вашей работы вы можете использовать ngrok (возможно, он доступен только для macOS, я не уверен).
    После загрузки ngrok откройте свой терминал и запустите команду
    $ ./path_to_ngrok_script/./ngrok http your_server_port_number

    Для меня это:
    $ ~/./scripts/ngrok http 3000

    После этого выполните следующие 3 действия для добавления вашей рабочей станции в белый список QuickSight:

  • В терминале с ngrok копией сгенерирован домен, который начинается с https (я назову его ngrok_domain), А НЕ С HTTP. Например: https://047956358355.ngrok.io

  • Перейдите к подводным скалам, стр.2, и добавьте ngrok_domain

  • Откройте браузер и перейдите к пути с iframe помощью , но используйте ngrok_domain вместо localhost:3000 . Например, ваш путь к встроенной панели localhost:3000/embed_dashboard мониторинга. Измените его на https://047956358355.ngrok.io/embed_dashboard

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

Комментарии:

1. Он отлично работал с ngRok

2. Как мы можем загрузить ту же панель мониторинга в мобильные приложения?