LoginSignup
2
1

【アップデート】QuickSight でデータソースにIAMロールを紐づけてアクセス制御する

Last updated at Posted at 2023-05-29

はじめに

こんにちは。株式会社ジールの@yakisobapanです。

Amazon QuickSightにて、IAMを使用したアクセス制御に関するアップデートがありましたので、試してみました。

目次

  • アップデート内容
  • アーキテクチャ
  • やってみた(S3)
  • 所感

アップデート内容

QuickSight内の個々のS3データソースに対して、IAMロールをアタッチできるようになり、データソースごとに緻密なアクセス制御が可能となりました。

Amazon QuickSight を使用すると、Amazon S3 と Athena に接続するデータソースへのロールベースのアクセスコントロールが可能になります
(2023/02/23 What's New with AWS?より)

アーキテクチャ

簡単に、以下のような構成です。
オレンジのルートが今回のアップデート箇所です。

image.png

やってみた(S3)

凡例)・サービス名|やること

①QuickSightからS3へのアクセスを制限

  • IAM|IAMポリシーの作成
    下記ポリシーを設定して、全面的なS3へのアクションを拒否します。
S3_access_deny
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}
  • QuickSight|作成したポリシーを適用
    作成した拒否ポリシー(S3_access_deny)をQuickSightへアタッチします。

 QuickSightの管理>
 セキュリティとアクセス権限>
 個々のユーザーとグループのリソースへのアクセス>
 IAM ポリシーの割り当て - 新しい割り当ての追加

image.png

  • QuickSight|ポリシーが働いていることを確認
    S3をソースとしたデータソースの作成が、IAMポリシーで拒否されていることが確認できます。1

image.png

先ほど設定したIAMポリシーは、QuickSightアカウント全体へ有効ですので
QuickSight→S3へのアクションは全ユーザーNGとなります。




②S3へアクセス許可されたIAMロールの作成

  • IAM|IAMポリシーの作成
    下記ポリシーを設定して、S3へのアクションを許可します。
S3_access_allow
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::BUCKETNAME"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKETNAME/FOLDERNAME/manifest.json"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKETNAME/FOLDERNAME/test_data.csv"
        }
    ]
}
アクション 説明
GetObject Amazon S3 からオブジェクトを取得するためのアクセス許可を付与
ListBucket Amazon S3 バケット内のオブジェクトの一部またはすべてを一覧表示するアクセス許可を付与

下記を許可しています。
・QuickSightへインポートしたいcsvファイルの取得
・データソースを作成するためのマニュフェストファイルの取得
・ファイルが配置されているバケットの参照

  • IAM|IAMロールの作成
    作成した許可ポリシーをIAMロールに割り当てます。

IAMロール作成時に、”カスタム信頼ポリシー”を選択し、
QuickSightでアクションが行えるように設定します。

次ページの許可ポリシーの設定で、前段で作成したポリシー(S3_access_allow)を設定します。

image.png

カスタム信頼ポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "quicksight.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}


③データソースを作成

  • CLI|データソースを作成
    ②で作成したIAMロールを使用して、CLIを使ってデータソースを作成します。
create-data-source
[cloudshell-user@ip-11-22-33-44 ~]$ aws quicksight create-data-source --aws-account-id ACCOUNTID --region ap-northeast-1 \
>     --endpoint https://quicksight.ap-northeast-1.amazonaws.com \
>     --data-source-id "datasource_s3_with_role" \
>     --cli-input-json '{
>         "Name": "S3 with a custom Role",
>         "Type": "S3",
>         "DataSourceParameters": {
>             "S3Parameters": {
>                 "RoleArn": "arn:aws:iam::ACCOUNTID:role/S3_Access_Allow_Role_v2",
>                 "ManifestFileLocation": {
>                     "Bucket": "BUCKETNAME", 
>                     "Key": "FOLDERNAME/manifest.json"
>                 }
>             }
>         }
>     }'
{
    "Status": 202,
    "Arn": "arn:aws:quicksight:ap-northeast-1:ACCOUNTID:datasource/datasource_s3_with_role",
    "DataSourceId": "datasource_s3_with_role",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "abcdefg-1111-2222-3333-hijklmnop"
}
  • CLI|作成したデータソースに適切な権限を付与

データソースを作成しただけですと、コンソール上で表示されない2ので、
CLIを使用して、対象QuickSightユーザーに対して、適切な権限を与えます。

<付与権限>

アクション 説明
UpdateDataSourcePermissions データソースのリソースポリシーを更新するアクセス許可を付与
DescribeDataSource データソースを記述するアクセス許可を付与
DescribeDataSourcePermissions データソースのリソースポリシーを記述するアクセス許可を付与
PassDataSource データセットのデータソースを使用するアクセス許可を付与
UpdateDataSource データソースを更新するアクセス許可を付与
DeleteDataSource データソースを削除するアクセス許可を付与
update-data-source-permissions
[cloudshell-user@ip-11-22-33-44 ~]$ aws quicksight update-data-source-permissions --aws-account-id ACCOUNTID \
>       --data-source-id datasource_s3_with_role \
>       --grant-permissions '{
>           "Principal": "arn:aws:quicksight:ap-northeast-1:ACCOUNTID:user/default/QS_USERNAME",
>           "Actions": [
>             "quicksight:UpdateDataSourcePermissions",
>             "quicksight:DescribeDataSource",
>             "quicksight:DescribeDataSourcePermissions",
>             "quicksight:PassDataSource",
>             "quicksight:UpdateDataSource",
>             "quicksight:DeleteDataSource"
>           ]
>         }'
{
    "Status": 200,
    "DataSourceArn": "arn:aws:quicksight:ap-northeast-1:ACCOUNTID:datasource/datasource_s3_with_role",
    "DataSourceId": "datasource_s3_with_role",
    "RequestId": "abcdefg-4444-5555-6666-hijklmnop"
}
  • QuickSight|データソースの確認
    CLIで作成したデータソース"S3 with a custom Role"が存在することを確認します。
    image.png

データソースの編集を確認すると、ロールが紐づいていることがわかります。
このIAMロールでS3のアクション許可がされているため、データソース作成が行えています。
image.png

S3に格納されているファイルがインポートされ、表示できています。
*QuickSightで表示しているデータはテストデータです。
image.png

所感

下記の条件に該当する場合に、使えそうだなと感じました。
・QuickSightアカウント全体として、S3リソースへのアクセスが制限されている
・特定のユーザーにのみ、S3データソースの作成が実行できるようにしたい

今後、他のデータソースに対しても同様のアップデートを心待ちにしています。

参考


株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area

  1. S3への接続について
    QuickSightの管理>セキュリティとアクセス権限>QuickSight の AWS のサービスへのアクセスより
    S3リソースのアクセス許可(バケット単位)を事前に行う必要があります。
    上記を実施しないと、ポリシーで制限をかける前からS3の参照はNGとなります。

  2. CLIを用いたデータソースの作成
    内部的には作成されています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1