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

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

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

您可以對連線至 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 必須與使用該角色的執行個體相 AWS 帳戶 同的 QuickSight IAM 角色對應。

  • IAM 角色必須具有信任關係, QuickSight 才能擔任該角色。

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

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

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

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

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

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

使用 Athena 資料來源執行查詢

使用 API 將 ARN 附加至 Athena 資料來源。若要這樣做,請在的RoleArnAthenaParameters屬性中新增角色 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 無伺服器資料來源不支援執行身分角色。

下圖所示為使用公有網路連線類型的 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": [ "*" ] } ] }

上述範例會建立使用RoleARNDatabaseUser、和 DatabaseGroups IAM 參數的資料來源。如果您只想透過 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 和 AWS 區域以符合您自己的帳戶 ID。

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權限給該角色,請在 Amazon Redshift 查詢編輯器中輸入下列命令。

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

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

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

Amazon S3 資料來源包含 QuickSight 用於尋找和剖析資料的資訊清單檔案。您可以透過 QuickSight 主控台上傳 JSON 資訊清單檔案,或者提供指向 S3 儲存貯體中 JSON 檔案的 URL。如果您選擇提供 URL,則 QuickSight 必須獲得存取 Amazon S3 中檔案的權限。使用 QuickSight 管理主控台來控制對資訊清單檔案及其參照資料的存取。

使用該RoleArn屬性,您可以通過覆蓋全帳戶角色的自定義 IAM 角色授予對清單文件及其引用數據的訪問權限。使用 API 將 ARN 附加至 Amazon S3 資料來源的清單檔案。若要這麼做,請在 S 3 參數的RoleArn屬性中包含角色 ARN。為了進行驗證,您可以在編輯 S3 資料來源對話方塊中查看角色 ARN。然而,如下列螢幕擷取畫面所示,角色 ARN 是唯讀欄位。

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

若要開始使用,請建立 Amazon S3 清單檔案。然後,您可以在建立新的 Amazon S3 資料集 QuickSight 時將其上傳到 Amazon,或將檔案放入包含資料檔案的 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。