在 Amazon QuickSight 中以 IAM 角色執行查詢 - Amazon QuickSight

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon QuickSight 中以 IAM 角色執行查詢

您可以對連線至 Amazon Athena、Amazon Redshift 或 Amazon S3 的資料來源使用精細定義的存取政策,而不是更寬泛的許可,以提升資料安全性。首先,您可以建立有許可的 AWS Identity and Access Management (IAM) 角色,以便在人員或 API 發起查詢時啟動。然後,Amazon QuickSight 管理員或開發人員,會將 IAM 角色指派給 Athena 或 Amazon S3 資料來源。角色實作之後,任何執行查詢的人員或 API 都具有執行查詢所需的確切許可。

在您承諾實作執行者角色以提升資料安全性之前,需考慮下列事項:

  • 說明額外的安全保護措施可如何為您帶來優勢。

  • 與 QuickSight 管理員合作,了解將角色新增至資料來源是否有助於更好地達到安全目標或要求。

  • 對於所涉及資料來源、人員和應用程式的數量,詢問您的團隊能否可靠記錄和維護這種類型的安全性? 如果不行,這部分的工作由誰負責?

  • 在結構化組織中,確定營運、開發和 IT 支援並行團隊中的利益相關者。詢問他們的經驗、建議以及是否願意支援您的計畫。

  • 啟動專案之前,考慮執行概念驗證,讓需要存取資料的人員參與其中。

下列規則會套用於將執行者角色與 Athena、Amazon Redshift 和 Amazon S3 結合使用:

  • 每個資料來源只能有一個關聯的 RoleArn。經常存取資料集和視覺效果的資料來源取用者可以產生許多不同類型的查詢。該角色對哪些查詢有效、哪些無效放置了界限。

  • ARN 必須對應至與使用它的 QuickSight 執行個體相同的 IAM AWS 帳戶 角色。

  • IAM 角色必須具有信任關係,允許 QuickSight 承擔該角色。

  • 呼叫 QuickSight API 的身分必須具有傳遞角色的許可,然後才能更新 RoleArn 屬性。您只需要在建立或更新角色 ARN 時傳遞角色。之後不會重新評估許可。同樣,當省略角色 ARN 時,不需要該許可。

  • 角色 ARN 被省略時,Athena 或 Amazon S3 資料來源會使用帳戶範圍的角色和範圍縮小政策。

  • 如果存在角色 ARN,帳戶範圍的角色和範圍縮小政策都會被忽略。對於 Athena 資料來源,不會忽略 Lake Formation 許可。

  • 對於 Amazon S3 資料來源,清單檔案和清單檔案指定的資料都必須可以使用 IAM 角色存取。

  • ARN 字串必須符合 中現有的 IAM 角色 AWS 帳戶 ,以及資料所在的位置和查詢 AWS 區域 位置。

當 QuickSight 連線到 中的其他服務時 AWS,會使用 IAM 角色。根據預設,QuickSight 會為角色使用的每個服務建立此較不精細的版本,而角色是由 AWS 帳戶 管理員管理。使用自訂許可政策新增 IAM 角色 ARN 時,您會覆寫需要額外保護之資料來源的更廣泛角色。如需政策的詳細資訊,請參閱《IAM 使用者指南》中的建立客戶管理政策

使用 Athena 資料來源執行查詢

使用 API 將 ARN 附加至 Athena 資料來源。為此,請在 AthenaParametersRoleArn 屬性中新增角色 ARN。為了進行驗證,您可以在編輯 Athena 資料來源對話方塊上查看角色 ARN。不過,角色 ARN 是唯讀欄位。

此時,畫面上會出現編輯 Athena 資料來源快顯視窗並顯示角色 ARN。

若要開始使用,您需要一個自訂的 IAM 角色,我們將在下列範例中展示此角色。

請記住,以下程式碼範例僅用於學習目的。此範例僅在臨時開發和測試環境中使用,不能在生產環境中使用。此範例中的政策不保護任何特定資源,這些資源必須位於可部署的政策中。此外,即使是為了開發,您也需要新增自己的 AWS 帳戶資訊。

下列命令會建立簡單的新角色,並附加一些授予 QuickSight 許可的政策。

aws iam create-role \ --role-name TestAthenaRoleForQuickSight \ --description "Test Athena Role For QuickSight" \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "quicksight.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

確定或建立要與每個資料來源搭配使用的 IAM 角色後,使用 attach-role-policy 附加政策。

aws iam attach-role-policy \ --role-name TestAthenaRoleForQuickSight \ --policy-arn arn:aws:iam::222222222222:policy/service-role/AWSQuickSightS3Policy1 aws iam attach-role-policy \ --role-name TestAthenaRoleForQuickSight \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSQuicksightAthenaAccess1 aws iam attach-role-policy \ --role-name TestAthenaRoleForQuickSight \ --policy-arn arn:aws:iam::aws:policy/AmazonS3Access1

驗證許可後,可以透過建立新角色或更新現有角色,在 QuickSight 資料來源中使用角色。使用這些命令時,請更新 AWS 帳戶 ID 和 AWS 區域 以符合您自己的 ID。

請記住,這些範例程式碼片段不適用於生產環境。 AWS 強烈建議您識別並使用一組最低權限政策來因應生產案例。

aws quicksight create-data-source --aws-account-id 222222222222 \ --region us-east-1 \ --data-source-id "athena-with-custom-role" \ --cli-input-json '{ "Name": "Athena with a custom Role", "Type": "ATHENA", "data sourceParameters": { "AthenaParameters": { "RoleArn": "arn:aws:iam::222222222222:role/TestAthenaRoleForQuickSight" } } }'

使用 Amazon Redshift 資料來源執行查詢

將 Amazon Redshift 資料與執行者角色關聯起來,以透過精細定義的存取政策來提升資料安全性。您可以為使用公有網路或 VPC 連線的 Amazon Redshift 資料來源建立執行者角色。可以在編輯 Amazon Redshift 資料來源對話方塊中指定要使用的連線類型。Amazon Redshift Serverless 資料來源不支援執行身分角色。

下圖所示為使用公有網路連線類型的 Amazon Redshift 資料來源。

此時,畫面上會出現編輯 Amazon S3 資料來源快顯視窗並顯示連線類型。

若要開始使用,您需要一個自訂的 IAM 角色,我們將在下列範例中展示此角色。下列命令會建立簡單的新角色,並附加授予 QuickSight 許可的政策。

aws iam create-role \ --role-name TestRedshiftRoleForQuickSight \ --description "Test Redshift Role For QuickSight" \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "quicksight.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

確定或建立要與每個資料來源搭配使用的 IAM 角色後,請將政策附加到 attach-role-policy。如果redshift:GetClusterCredentialsWithIAM許可連接到您要使用的角色,則 DatabaseUser和 的值DatabaseGroups為選用。

aws iam attach-role-policy \ --role-name TestRedshiftRoleForQuickSight \ --policy-arn arn:aws:iam:111122223333:policy/service-role/AWSQuickSightRedshiftPolicy aws iam create-policy --policy-name RedshiftGetClusterCredentialsPolicy1 \ --policy-document file://redshift-get-cluster-credentials-policy.json aws iam attach-role-policy \ --role-name TestRedshiftRoleForQuickSight \ --policy-arn arn:aws:iam:111122223333:policy/RedshiftGetClusterCredentialsPolicy1 // redshift-get-cluster-credentials-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftGetClusterCredentialsPolicy", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "*" ] } ] }

上述範例會建立使用 RoleARNDatabaseUserDatabaseGroupsIAM 參數的資料來源。如果您想要僅透過 IAM RoleARN 參數建立連線,請將redshift:GetClusterCredentialsWithIAM許可連接至您的角色,如以下範例所示。

aws iam attach-role-policy \ --role-name TestRedshiftRoleForQuickSight \ --policy-arn arn:aws:iam:111122223333:policy/RedshiftGetClusterCredentialsPolicy1 // redshift-get-cluster-credentials-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftGetClusterCredentialsPolicy", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentialsWithIAM" ], "Resource": [ "*" ] } ] }"

驗證許可後,可以透過建立新角色或更新現有角色,在 QuickSight 資料來源中使用角色。使用這些命令時,請更新 AWS 帳戶 ID 和區域以符合您自己的 ID 和 AWS 區域。

aws quicksight create-data-source \ --region us-west-2 \ --endpoint https://quicksight.us-west-2.quicksight.aws.com/ \ --cli-input-json file://redshift-data-source-iam.json \ redshift-data-source-iam.json is shown as below { "AwsAccountId": "AWSACCOUNTID", "DataSourceId": "DATSOURCEID", "Name": "Test redshift demo iam", "Type": "REDSHIFT", "DataSourceParameters": { "RedshiftParameters": { "Database": "integ", "Host": "redshiftdemocluster.us-west-2.redshift.amazonaws.com", "Port": 8192, "ClusterId": "redshiftdemocluster", "IAMParameters": { "RoleArn": "arn:aws:iam::222222222222:role/TestRedshiftRoleForQuickSight", "DatabaseUser": "user", "DatabaseGroups": ["admin_group", "guest_group", "guest_group_1"] } } }, "Permissions": [ { "Principal": "arn:aws:quicksight:us-east-1:AWSACCOUNTID:user/default/demoname", "Actions": [ "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:PassDataSource", "quicksight:UpdateDataSource", "quicksight:DeleteDataSource", "quicksight:UpdateDataSourcePermissions" ] } ] }

如果您的資料來源使用 VPC 連線類型,請使用下列 VPC 組態。

{ "AwsAccountId": "AWSACCOUNTID", "DataSourceId": "DATSOURCEID", "Name": "Test redshift demo iam vpc", "Type": "REDSHIFT", "DataSourceParameters": { "RedshiftParameters": { "Database": "mydb", "Host": "vpcdemo.us-west-2.redshift.amazonaws.com", "Port": 8192, "ClusterId": "vpcdemo", "IAMParameters": { "RoleArn": "arn:aws:iam::222222222222:role/TestRedshiftRoleForQuickSight", "DatabaseUser": "user", "AutoCreateDatabaseUser": true } } }, "VpcConnectionProperties": { "VpcConnectionArn": "arn:aws:quicksight:us-west-2:222222222222:vpcConnection/VPC Name" }, "Permissions": [ { "Principal": "arn:aws:quicksight:us-east-1:222222222222:user/default/demoname", "Actions": [ "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:PassDataSource", "quicksight:UpdateDataSource", "quicksight:DeleteDataSource", "quicksight:UpdateDataSourcePermissions" ] } ] }

如果您的資料來源使用 redshift:GetClusterCredentialsWithIAM 許可,但不使用 DatabaseUserDatabaseGroups 參數,請授予角色對結構描述中部分或全部資料表的存取權。若要查看角色是否已授予特定資料表的SELECT許可,請在 Amazon Redshift 查詢編輯器中輸入下列命令。

SELECT u.usename, t.schemaname||'.'||t.tablename, has_table_privilege(u.usename,t.tablename,'select') AS user_has_select_permission FROM pg_user u CROSS JOIN pg_tables t WHERE u.usename = 'IAMR:RoleName' AND t.tablename = tableName

如需 Amazon Redshift 查詢編輯器中SELECT動作的詳細資訊,請參閱 SELECT

若要授予SELECT權限給角色,請在 Amazon Redshift 查詢編輯器中輸入下列命令。

GRANT SELECT ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO "IAMR:Rolename";

如需 Amazon Redshift 查詢編輯器中GRANT動作的詳細資訊,請參閱 GRANT

使用 Amazon S3 資料來源執行查詢

Amazon S3 資料來源包含一個清單檔案,QuickSight 可用其來查找和剖析您的資料。您可以透過 QuickSight 主控台上傳 JSON 清單檔案,也可以提供指向 S3 儲存貯體中之 JSON 檔案的 URL。如果您選擇提供 URL,QuickSight 必須取得 Amazon S3 中之檔案的存取權限。使用 QuickSight 管理主控台來控制對清單檔案及其所引用資料的存取。

藉助 RoleArn 屬性,您可以透過覆寫帳戶範圍角色的自訂 IAM 角色授予對清單檔案及其所引用資料的存取權限。使用 API 將 ARN 附加至 Amazon S3 資料來源的清單檔案。為此,請將角色 ARN 包含在 S3ParametersRoleArn 屬性中。為了進行驗證,您可以在編輯 S3 資料來源對話方塊中查看角色 ARN。然而,如下列螢幕擷取畫面所示,角色 ARN 是唯讀欄位。

此時,畫面上會出現編輯 Amazon S3 資料來源快顯視窗並顯示角色 ARN。

若要開始使用,請建立 Amazon S3 清單檔案。然後,可以在建立新的 Amazon S3 資料集時將其上傳到 Amazon QuickSight,或將檔案放入包含資料檔案的 Amazon S3 儲存貯體中。檢視下列範例以了解清單檔案的外觀:

{ "fileLocations": [ { "URIPrefixes": [ "s3://quicksightUser-run-as-role/data/" ] } ], "globalUploadSettings": { "format": "CSV", "delimiter": ",", "textqualifier": "'", "containsHeader": "true" } }

如需如何建立清單檔案的詳細資訊,請參閱 支援的 Amazon S3 清單檔案格式

建立清單檔案並將其新增至 Amazon S3 儲存貯體或上傳到 QuickSight 之後,在 IAM 中建立新角色或更新現有角色,以授予 s3:GetObject 存取權限。下列範例說明如何使用 AWS API 更新現有的 IAM 角色:

aws iam put-role-policy \ --role-name QuickSightAccessToS3RunAsRoleBucket \ --policy-name GrantS3RunAsRoleAccess \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::s3-bucket-name" }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::s3-bucket-name/manifest.json" }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::s3-bucket-name/*" } ] }'

政策授予 s3:GetObject 存取權限後,您可以開始建立資料來源,將更新的 put-role-policy 套用至 Amazon S3 資料來源的清單檔案。

aws quicksight create-data-source --aws-account-id 111222333444 --region us-west-2 --endpoint https://quicksight.us-west-2.quicksight.aws.com/ \ --data-source-id "s3-run-as-role-demo-source" \ --cli-input-json '{ "Name": "S3 with a custom Role", "Type": "S3", "DataSourceParameters": { "S3Parameters": { "RoleArn": "arn:aws:iam::111222333444:role/QuickSightAccessRunAsRoleBucket", "ManifestFileLocation": { "Bucket": "s3-bucket-name", "Key": "manifest.json" } } } }'

驗證許可後,可以透過建立新角色或更新現有角色,在 QuickSight 資料來源中使用角色。使用這些命令時,請務必更新 AWS 帳戶 ID 和 AWS 區域 以符合您自己的 ID。