

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

# 在 Amazon Quick 中以 IAM 角色執行查詢
<a name="datasource-run-as-role"></a>

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

在您承諾實作執行者角色以提升資料安全性之前，需考慮下列事項：
+ 說明額外的安全保護措施可如何為您帶來優勢。
+ 與您的快速管理員合作，了解將角色新增至資料來源是否可協助您更完善地滿足您的安全目標或需求。
+ 對於所涉及資料來源、人員和應用程式的數量，詢問您的團隊能否可靠記錄和維護這種類型的安全性？ 如果不行，這部分的工作由誰負責？
+ 在結構化組織中，確定營運、開發和 IT 支援並行團隊中的利益相關者。詢問他們的經驗、建議以及是否願意支援您的計畫。
+ 啟動專案之前，考慮執行概念驗證，讓需要存取資料的人員參與其中。

下列規則會套用於將執行者角色與 Athena、Amazon Redshift 和 Amazon S3 結合使用：
+ 每個資料來源只能有一個關聯的 RoleArn。經常存取資料集和視覺效果的資料來源取用者可以產生許多不同類型的查詢。該角色對哪些查詢有效、哪些無效放置了界限。
+ ARN 必須對應至與使用它的 AWS 帳戶 快速執行個體相同的 IAM 角色。
+ IAM 角色必須具有信任關係，允許 Quick 擔任該角色。
+ 呼叫 Quick APIs 的身分必須具有傳遞角色的許可，才能更新 `RoleArn` 屬性。您只需要在建立或更新角色 ARN 時傳遞角色。之後不會重新評估許可。同樣，當省略角色 ARN 時，不需要該許可。
+ 角色 ARN 被省略時，Athena 或 Amazon S3 資料來源會使用帳戶範圍的角色和範圍縮小政策。
+ 如果存在角色 ARN，帳戶範圍的角色和範圍縮小政策都會被忽略。對於 Athena 資料來源，不會忽略 Lake Formation 許可。
+ 對於 Amazon S3 資料來源，清單檔案和清單檔案指定的資料都必須可以使用 IAM 角色存取。
+ ARN 字串必須符合 中現有的 IAM 角色 AWS 帳戶 ，以及資料所在的位置和查詢 AWS 區域 位置。

當 Quick 連線到 中的其他服務時 AWS，會使用 IAM 角色。根據預設，Quick 會為角色使用的每個服務建立此較不精細版本，而角色是由 AWS 帳戶 管理員管理。使用自訂許可政策新增 IAM 角色 ARN 時，您會覆寫需要額外保護之資料來源的更廣泛角色。如需政策的詳細資訊，請參閱《IAM 使用者指南》中的[建立客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)。

## 使用 Athena 資料來源執行查詢
<a name="datasource-run-as-role-athena"></a>

使用 API 將 ARN 附加至 Athena 資料來源。為此，請在 [AthenaParameters](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AthenaParameters.html) 的 [RoleArn](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RoleArn.html) 屬性中新增角色 ARN。為了進行驗證，您可以在**編輯 Athena 資料來源**對話方塊上查看角色 ARN。不過，**角色 ARN** 是唯讀欄位。

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

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

下列命令會建立一個簡單的新角色，並連接一些將許可授予 Quick 的政策。

```
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
```



驗證許可後，您可以透過建立新角色或更新現有角色，在快速資料來源中使用角色。使用這些命令時，請更新 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 資料來源執行查詢
<a name="datasource-run-as-role-redshift"></a>

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

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

```
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": [
                "*"
            ]
        }
    ]
}
```

上述範例會建立使用 `RoleARN`、`DatabaseUser` 和 `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": [ "*" ]
        }
    ]
}"
```

驗證許可後，您可以透過建立新角色或更新現有角色，在快速資料來源中使用角色。使用這些命令時，請更新 AWS 帳戶 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` 許可，但不使用 `DatabaseUser` 或 `DatabaseGroups` 參數，請授予角色存取結構描述中部分或全部資料表的權限。若要查看是否已授予角色對特定資料表的 `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](https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_synopsis.html)。

若要將 `SELECT` 許可授予給角色，請在 Amazon Redshift 查詢編輯器中輸入下列命令。

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

如需有關 Amazon Redshift 查詢編輯器中 `GRANT` 動作的詳細資訊，請參閱 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。

## 使用 Amazon S3 資料來源執行查詢
<a name="datasource-run-as-role-s3"></a>

Amazon S3 資料來源包含資訊清單檔案，Quick 會使用此檔案來尋找和剖析您的資料。您可以透過快速主控台上傳 JSON 資訊清單檔案，也可以提供指向 S3 儲存貯體中 JSON 檔案的 URL。如果您選擇提供 URL，則必須授予 Quick 存取 Amazon S3 中檔案的許可。使用快速管理主控台來控制資訊清單檔案及其參考資料的存取。

藉助 **RoleArn** 屬性，您可以透過覆寫帳戶範圍角色的自訂 IAM 角色授予對清單檔案及其所引用資料的存取權限。使用 API 將 ARN 附加至 Amazon S3 資料來源的清單檔案。為此，請將角色 ARN 包含在 [S3Parameters](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_S3Parameters.html) 的 [RoleArn](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RoleArn.html) 屬性中。為了進行驗證，您可以在**編輯 S3 資料來源**對話方塊中查看角色 ARN。然而，如下列螢幕擷取畫面所示，**角色 ARN** 是唯讀欄位。

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

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

如需如何建立清單檔案的詳細資訊，請參閱 [支援的 Amazon S3 清單檔案格式](supported-manifest-file-format.md)。

在您建立資訊清單檔案並將其新增至 Amazon S3 儲存貯體或將其上傳至 Quick 之後，請在 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"
                }
            }
        }
    }'
```

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