Amazon QuickSight でのデータベース認証情報の代用としての AWS Secrets Manager シークレットの使用 - Amazon QuickSight

Amazon QuickSight でのデータベース認証情報の代用としての AWS Secrets Manager シークレットの使用

   対象者: Amazon QuickSight 管理者と Amazon QuickSight デベロッパー 

AWS Secrets Manager は、データベース認証情報、API キー、およびその他の秘密情報を保護するために使用できるシークレットストレージサービスです。シークレットはコードに保存されていないため、キーの使用はお客様のコードを調べている誰かがシークレットを漏らさないようにするのに役立ちます。この概要については、「AWS Secrets Manager ユーザーガイド」を参照してください

Amazon QuickSight 管理者は、Secrets Manager で作成したシークレットへの読み取り専用アクセスを QuickSight に付与できます。これらのシークレットは、QuickSight API を使用してデータソースの作成および編集を実行するときに、データベース認証情報の代用として使用できます。

QuickSight は、認証情報のペア認証をサポートするデータソースタイプのシークレットの使用をサポートします。現在、Jira および ServiceNow はサポートされていません。

注記

AWS Secrets Manager を Amazon QuickSight と併用する場合、「AWS Secrets Manager Pricing page」(AWS Secrets Manager 料金ページ) に記載されているように、アクセスとメンテナンスの料金が請求されます。請求明細では、費用は QuickSight ではなく Secrets Manager に明細に記載されています。

Secrets Manager を Amazon QuickSight と統合するには、以下のセクションで説明されている以下の手順を使用してください。

Secrets Manager に対するアクセス権の QuickSight への付与と選択されたシークレット

ユーザーが管理者で、Secrets Manager にシークレットがある場合は、選択されたシークレットに対する読み取り専用アクセス権を Amazon QuickSight に付与できます。

Secrets Manager に対するアクセス権と選択されたシークレットを QuickSight に付与する
  1. QuickSight で右上にあるユーザー名をクリックし、[Manage QuickSight] (QuickSight の管理) を選択します。

    
                        QuickSight の管理メニュー。
  2. 左側の [Security & permissions] (セキュリティとアクセス権限) を選択します。

  3. [QuickSight access to AWS resources] (AWS リソースへの QuickSight アクセス) で [Manage] (管理) を選択します。

    
                        セキュリティとアクセス権限を管理します。
  4. [Allow access and autodiscovery for these resources] (これらのリソースへのアクセスと自動検出を許可) で AWS Secrets Manager[Select secrets] (シークレットを選択) を選択します。

    [AWS Secrets Manager secrets] (AWS Secrets Manager シークレット) ページが開きます。

  5. QuickSight に読み取り専用アクセス権を付与するシークレットを選択します。

    QuickSight サインアップリージョンのシークレットが自動的に表示されます。ホームリージョン外のシークレットを選択する場合は、[Secrets in Other AWS Regions] (他の AWS リージョンのシークレット) を選択して、これらのシークレットの Amazon リソースネーム (ARN) を入力します。

  6. 入力後、[Finish] (完了) を選択します。

    QuickSight が、アカウントに aws-quicksight-secretsmanager-role-v0 という名前の IAM ロールを作成します。これは、指定されたシークレットへの読み取り専用アクセス権をアカウント内のユーザーに付与するもので、以下のようになります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:accountId:secret:secret_name" ] } ] }

    QuickSight ユーザーが、シークレットが含まれるデータソースを使用するダッシュボードから分析を作成する、またはそれらを表示するときは、QuickSight がこの Secrets Manager IAM ロールを引き受けます。シークレットのアクセス許可ポリシーの詳細については、「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager の認証とアクセスコントロール」を参照してください。

    QuickSight IAM ロールで指定されたシークレットには、アクセスを拒否する追加のリソースポリシーが含まれている場合があります。詳細については、「AWS Secrets Manager ユーザーガイド」の「アクセス許可ポリシーをシークレットにアタッチする」を参照してください。

    シークレットの暗号化に AWS マネージド AWS KMS キーを使用している場合、QuickSight は Secrets Manager での追加のアクセス許可のセットアップを必要としません。

    シークレットの暗号化にカスタマーマネージドキーを使用している場合は、QuickSight IAM ロール aws-quicksight-secretsmanager-role-v0kms:Decrypt アクセス許可があることを確認してください。詳細については、「AWS Secrets Manager ユーザーガイド」の「KMS キーのアクセス許可」を参照してください。

    AWS Key Management Service で使用されるキーのタイプに関する詳細については、「AWS Key Management Service ガイド」の「カスタマーキーと AWS キー」を参照してください。

QuickSight API を使用したシークレット認証情報でのデータソースの作成または更新

QuickSight 管理者が Secrets Manager への読み取り専用アクセス権を QuickSight に付与したら、管理者は認証情報として選択したシークレットを使用して、API でデータソースの作成と更新を実行できます。

以下は、QuickSight でデータソースを作成するための API コールの例です。この例は、create-data-source API オペレーションを使用します。また、update-data-source オペレーションを使用することもできます。詳細については、「Amazon QuickSight API リファレンス」の「CreateDataSource」と「UpdateDataSource」を参照してください。

以下の API コール例のアクセス許可で指定されたユーザーは、QuickSight で指定された MySQL データソースに対してデータソースの削除、表示、および編集を実行できます。また、データソースのアクセス許可の表示と更新を実行することも可能です。ユーザー名とパスワードの代わりに、データソースの認証情報としてシークレット ARN が使用されます。

aws quicksight create-data-source --aws-account-id AWSACCOUNTID \ --data-source-id DATASOURCEID \ --name NAME \ --type MYSQL \ --permissions '[{"Principal": "arn:aws:quicksight:region:accountID:user/namespace/username", "Actions": ["quicksight:DeleteDataSource", "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:PassDataSource", "quicksight:UpdateDataSource", "quicksight:UpdateDataSourcePermissions"]}]' \ --data-source-parameters='{"MySQLParameters":{"Database": "database", "Host":"hostURL", "Port":"port"}}' \ --credentials='{"SecretArn":"arn:aws:secretsmanager:region:accountID:secret:secretname"}' \ --region us-west-2

この API コールでは、QuickSight が IAM サービスロールのポリシーではなく、API 呼び出し元の IAM ポリシーに基づいてシークレットへの secretsmanager:GetSecretValue アクセスを許可します。IAM サービスロールはアカウントレベルで機能し、ユーザーが分析やダッシュボードを表示するときに使用されます。ユーザーがデータソースを作成または更新するときのシークレットへのアクセスの許可には使用できません。

QuickSight UI でデータソースを編集すると、ユーザーは AWS Secrets Manager が認証情報タイプとして使用されているデータソースのシークレット ARN を表示できます。シークレットを編集したり、別のシークレットを選択したりすることはできません。データベースサーバーやポートなどを変更する必要がある場合、ユーザーはまず [Credential pair] (認証情報ペア) を選択し、ユーザー名とパスワードを入力する必要があります。

シークレットは、UI でデータソースが変更されると、データソースから自動的に削除されます。シークレットをデータソースに復元するには、update-data-source API オペレーションを使用します。

シークレットの内容

QuickSight では、シークレットへのアクセスに以下の JSON 形式が必要です。

{ "username": "username", "password": "password" }

username および password フィールドは、QuickSight がシークレットにアクセスするために必要なフィールドです。その他のすべてのフィールドはオプションで、QuickSight はそれらを無視します。

JSON 形式は、データベースのタイプに応じて異なります。詳細については、「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager データベース認証情報シークレットの JSON 構造」を参照してください。

シークレットの変更

シークレットを変更するには、Secrets Manager を使用します。シークレットを変更した後、QuickSight が次にシークレットへのアクセスをリクエストするときに更新が利用可能になります。