

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Quick での IAM ロールとしてのクエリの実行
<a name="datasource-run-as-role"></a>

Amazon Athena、Amazon Redshift または Amazon S3 に接続されたデータソースに対してより広範な許可を与えるのではなく、きめ細かなアクセスポリシーを使用することで、データセキュリティを強化できます。まず、ユーザーまたは API がクエリを開始したときにアクティブになる権限を持つ AWS Identity and Access Management (IAM) ロールを作成します。次に、クイック管理者または開発者が IAM ロールを Athena または Amazon S3 データソースに割り当てます。ロールを設定すると、クエリを実行するすべてのユーザーまたは API に、クエリを実行するのに必要な正確な権限が付与されます。

データセキュリティを強化するために run-as ロールの実装に取り掛かる前に、考慮すべき点がいくつかあります。
+ 追加のセキュリティがどのように役立つかを明確にします。
+ クイック管理者と協力して、データソースにロールを追加すると、セキュリティの目標や要件をより適切に満たすことができるかどうかを確認してください。
+ データソース、関係する人、アプリケーションの数を考慮して、この種のセキュリティをチームで適切に文書化して管理できるかどうか尋ねてみてください。そうでない場合、その作業は誰が引き受けるのでしょうか？
+ 構造化された組織では、運用、開発、IT サポートといった並列チームに関係者を配置します。彼らの経験、アドバイス、そしてあなたの計画をサポートしたいという意欲を求めてください。
+ プロジェクトを開始する前に、データへのアクセスを必要とする人を対象とした概念実証を行うことを検討してください。

Athena、Amazon Redshift または Amazon S3 での run-as ロールの使用には、次のルールが適用されます。
+ 各データソースには、1 つの RoleArn しか関連付けられません。通常、データセットやビジュアルにアクセスするデータソースの使用者は、さまざまな種類のクエリを生成できます。このロールは、どのクエリが機能するか、どのクエリが機能しないかについての境界を設定します。
+ ARN は、それを使用するクイックインスタンス AWS アカウント と同じ の IAM ロールに対応する必要があります。
+ IAM ロールには、Quick がロールを引き受けることを可能にする信頼関係が必要です。
+ Quick の APIs を呼び出す ID には、 `RoleArn` プロパティを更新する前にロールを渡すアクセス許可が必要です。ロール ARN を作成または更新する場合にのみ、ロールを渡す必要があります。権限は後で再評価されません。同様に、ロール ARN を省略しても権限は不要です。
+ ロール ARN を省略すると、Athena または Amazon S3 データソースはアカウント全体のロールとスコープダウンポリシーを使用します。
+ ロール ARN が存在する場合、アカウント全体のロールとスコープダウンポリシーの両方が無視されます。Athena データソースの場合、Lake Formation 許可は無視されません。
+ Amazon S3 データソースの場合、マニフェストファイルとマニフェストファイルによって指定されたデータの両方に、IAM ロールを使用してアクセスできる必要があります。
+ ARN 文字列は、 AWS リージョン データが配置およびクエリされる AWS アカウント および の既存の IAM ロールと一致する必要があります。

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 リージョン して独自のコマンドと一致させます。

これらのサンプルコードスニペットは本番環境向けではないことに注意してください。 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 データを run-as ロールと接続して、きめ細かいアクセスポリシーでデータセキュリティを強化します。パブリックネットワークまたは VPC 接続を使用する Amazon Redshift データソース用の run-as ロールを作成できます。**[Amazon Redshift データソースの編集]** ダイアログボックスで使用する接続タイプを指定します。run-as ロールは、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 を指定する場合は、Amazon S3 の ファイルにアクセスするためのアクセス許可が Quick に付与されている必要があります。クイック管理コンソールを使用して、マニフェストファイルとそれが参照するデータへのアクセスを制御します。

**RoleArn** プロパティを使用すると、アカウント全体のロールをオーバーライドするカスタム IAM ロールを通じて、マニフェストファイルとそれが参照するデータへのアクセスを付与できます。API を使用して、ARN を Amazon S3 データソースのマニフェストファイルにアタッチします。これを実行するには、[S3Parameters](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_S3Parameters.html) の [RoleArn](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RoleArn.html) プロパティにロール ARN を含めます。確認のために、**[S3 データソースを編集]** ダイアログボックスでロール ARN を表示できます。ただし、次のスクリーンショットに示すように、**[Role 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 バケットに追加するか、クイックにアップロードしたら、`s3:GetObject`アクセス権を付与する IAM の既存のロールを作成または更新します。次の例は、 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` アクセスが付与されたら、Amazon S3 データソースのマニフェストファイルに更新された `put-role-policy` を適用するデータソースの作成を開始できます。

```
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 リージョン して独自のコマンドと一致させてください。