構造化データストアを使用してナレッジベースを作成するためのクエリエンジンとアクセス許可を設定する - Amazon Bedrock

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

構造化データストアを使用してナレッジベースを作成するためのクエリエンジンとアクセス許可を設定する

このトピックでは、ナレッジベースを構造化データストアに接続するときに必要なアクセス許可について説明します。Amazon Bedrock ナレッジベースを構造化データストアに接続する場合は、前提条件を満たす必要があります。一般的なアクセス許可要件を満たすには、「」を参照してくださいナレッジベースを作成および管理するためのユーザーまたはロールのアクセス許可を設定する

重要

任意の SQL クエリを実行すると、Text-to-SQL アプリケーションのセキュリティリスクになる可能性があります。制限されたロール、読み取り専用データベース、サンドボックスなど、必要に応じて予防措置を講じることをお勧めします。

Amazon Bedrock ナレッジベースは、データストアをクエリするためのクエリエンジンとして Amazon Redshift を使用します。クエリエンジンは構造化データストアからメタデータにアクセスし、そのメタデータを使用して SQL クエリを生成します。Amazon Redshift は、SQL を使用してデータウェアハウス、データベース、データレイク全体の構造化データを分析するためのデータウェアハウスサービスです。

Amazon Redshift クエリエンジンを作成する

ユースケースに応じて Amazon Redshift Serverless または Amazon Redshift Provisioned を使用し、データウェアハウスのワークグループまたはクラスターに接続できます。Amazon Redshift エンジンがクエリできる基盤となるデータは、Amazon Redshift クラスターにネイティブに保存されるデータでも、デフォルト AWS Glue Data Catalog (Amazon S3 など) にあるデータでもかまいません。

クエリエンジンを既に作成している場合は、この前提条件をスキップできます。それ以外の場合は、次の手順を実行して Amazon Redshift プロビジョンドクエリエンジンまたは Amazon Redshift Serverless クエリエンジンを設定します。

プロビジョニングされた Amazon Redshift でクエリエンジンを設定するには
  1. 「Amazon Redshift 入門ガイド」の「ステップ 1: サンプル Amazon Redshift クラスターを作成する」の手順に従います。

  2. クラスター ID を書き留めます。

  3. (オプション) Amazon Redshift でプロビジョニングされたクラスターの詳細については、「Amazon Redshift 管理ガイド」の「Amazon Redshift でプロビジョニングされたクラスター」を参照してください。

Amazon Redshift Serverless でクエリエンジンを設定するには
  1. 「Amazon Redshift 入門ガイド」の「Amazon Redshift Serverless でデータウェアハウスを作成する」のセットアップ手順のみに従い、デフォルト設定で設定します。

  2. ワークグループ ARN を書き留めます。

  3. (オプション) Amazon Redshift Serverless ワークグループの詳細については、「Amazon Redshift 管理ガイド」の「ワークグループと名前空間」を参照してください。

Amazon Redshift クエリエンジンのアクセス許可を設定する

選択した Amazon Redshift クエリエンジンに応じて、特定のアクセス許可を設定できます。設定するアクセス許可は、認証方法によって異なります。次の表は、さまざまなクエリエンジンに使用できる認証方法を示しています。

認証方法 Amazon Redshift プロビジョニング済み Amazon Redshift Serverless
IAM Green circular icon with a white checkmark symbol inside. あり Green circular icon with a white checkmark symbol inside. あり
データベースユーザー名 Green circular icon with a white checkmark symbol inside. あり Red circular icon with an X symbol, indicating cancellation or denial. なし
AWS Secrets Manager Green circular icon with a white checkmark symbol inside. あり Green circular icon with a white checkmark symbol inside. あり

Amazon Bedrock ナレッジベースは、サービスロールを使用してナレッジベースを構造化データストアに接続し、これらのデータストアからデータを取得し、ユーザークエリとデータストアの構造に基づいて SQL クエリを生成します。

注記

を使用してナレッジベース AWS Management Console を作成する場合は、この前提条件をスキップできます。コンソールは、適切なアクセス許可を持つ Amazon Bedrock ナレッジベースサービスロールを作成します。

適切なアクセス許可を持つカスタム IAM サービスロールを作成するには、「ロールの作成」の手順に従って にアクセス許可を委任 AWS のサービスし、 で定義されている信頼関係をアタッチします信頼関係

次に、ナレッジベースが Amazon Redshift クエリエンジンとデータベースにアクセスするためのアクセス許可を追加します。ユースケースに適用されるセクションを展開します。

次のポリシーをカスタムサービスロールにアタッチして、データにアクセスしてそれを使用してクエリを生成できるようにします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftDataAPIStatementPermissions", "Effect": "Allow", "Action": [ "redshift-data:GetStatementResult", "redshift-data:DescribeStatement", "redshift-data:CancelStatement" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "redshift-data:statement-owner-iam-userid": "${aws:userid}" } } }, { "Sid": "RedshiftDataAPIExecutePermissions", "Effect": "Allow", "Action": [ "redshift-data:ExecuteStatement" ], "Resource": [ "arn:aws:redshift:${Region}:${Account}:cluster:${Cluster}" ] }, { "Sid": "SqlWorkbenchAccess", "Effect": "Allow", "Action": [ "sqlworkbench:GetSqlRecommendations", "sqlworkbench:PutSqlGenerationContext", "sqlworkbench:GetSqlGenerationContext", "sqlworkbench:DeleteSqlGenerationContext" ], "Resource": "*" }, { "Sid": "GenerateQueryAccess", "Effect": "Allow", "Action": [ "bedrock:GenerateQuery" ], "Resource": "*" } ] }

また、サービスロールがクエリエンジンに対して認証できるようにするアクセス許可を追加する必要があります。セクションを展開すると、そのメソッドのアクセス許可が表示されます。

IAM

サービスロールが IAM を使用して Amazon Redshift でプロビジョニングされたクエリエンジンに対して認証できるようにするには、カスタムサービスロールに次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetCredentialsWithFederatedIAMCredentials", "Effect": "Allow", "Action": "redshift:GetClusterCredentialsWithIAM", "Resource": [ "arn:aws:redshift:${region}:${account}:dbname:${cluster}/${database}" ] } }
Database user

Amazon Redshift データベースユーザーとして認証するには、サービスロールに次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetCredentialsWithClusterCredentials", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:${region}:${account}:dbuser:${cluster}/${dbuser}", "arn:aws:redshift:${region}:${account}:dbname:${cluster}/${database}" ] } ] }
AWS Secrets Manager

サービスロールが AWS Secrets Manager シークレットを使用して Amazon Redshift でプロビジョニングされたクエリエンジンに対して認証できるようにするには、次の手順を実行します。

  • ロールに次のポリシーをアタッチします。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GetSecretPermissions", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:${region}:${account}:secret:${secretName}" ] } ] }

アタッチするアクセス許可は、認証方法によって異なります。セクションを展開して、メソッドのアクセス許可を表示します。

IAM

サービスロールが IAM を使用して Amazon Redshift サーバーレスクエリエンジンに対して認証できるようにするには、カスタムサービスロールに次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftServerlessGetCredentials", "Effect": "Allow", "Action": "redshift-serverless:GetCredentials", "Resource": [ "arn:aws:redshift-serverless:${Region}:${Account}:workgroup:${WorkgroupId}" ] } ] }
AWS Secrets Manager

サービスロールが AWS Secrets Manager シークレットを使用して Amazon Redshift でプロビジョニングされたクエリエンジンに対して認証できるようにするには、次の手順を実行します。

  • ロールに次のポリシーをアタッチします。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GetSecretPermissions", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:${region}:${account}:secret:${secretName}" ] } ] }

データストアへのアクセスをナレッジベースサービスロールに許可する

サポートされている構造化データストアのいずれかにデータが保存されていることを確認します。

  • Amazon Redshift

  • AWS Glue Data Catalog (AWS Lake Formation)

次の表は、データストアに応じて、クエリエンジンで使用できる認証方法をまとめたものです。

認証方法 Amazon Redshift AWS Glue Data Catalog (AWS Lake Formation)
IAM Green circular icon with a white checkmark symbol inside. あり Green circular icon with a white checkmark symbol inside. あり
データベースユーザー名 Green circular icon with a white checkmark symbol inside. あり Red circular icon with an X symbol, indicating cancellation or denial. なし
AWS Secrets Manager Green circular icon with a white checkmark symbol inside. あり Red circular icon with an X symbol, indicating cancellation or denial. なし

Amazon Bedrock ナレッジベースサービスロールがデータストアにアクセスし、それに基づいてクエリを生成するアクセス許可を設定する方法については、データストアがあるサービスに対応するセクションを展開します。

Amazon Bedrock ナレッジベースサービスロールに Amazon Redshift データベースへのアクセスを許可するには、Amazon Redshift クエリエディタ v2 を使用して、次の SQL コマンドを実行します。

  1. (IAM で認証し、ユーザーがデータベース用にまだ作成されていない場合) 次のコマンドを実行します。このコマンドでは、CREATE USER を使用してデータベースユーザーを作成し、IAM による認証を許可します。${service-role} を、作成したカスタム Amazon Bedrock ナレッジベースサービスロールの名前に置き換えます。

    CREATE USER "IAMR:${service-role}" WITH PASSWORD DISABLE;
    重要

    コンソールで作成した Amazon Bedrock ナレッジベースサービスロールを使用してから、このステップを実行する前にデータストアを同期すると、ユーザーは自動的に作成されますが、データストアへのアクセス許可がユーザーに付与されていないため、同期は失敗します。同期する前に、次のステップを実行する必要があります。

  2. GRANT コマンドを実行して、データベースから情報を取得するアクセス許可を ID に付与します。

    IAM
    GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "IAMR:${serviceRole}";
    Database user
    GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "${dbUser}";
    AWS Secrets Manager username
    GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "${secretsUsername}";
    重要

    CREATEUPDATE、または アクセスを許可しないでくださいDELETE。これらのアクションを付与すると、データの意図しない変更につながる可能性があります。

    アクセス可能なテーブルをよりきめ細かく制御するには、ALL TABLES特定のテーブル名を ${schemaName}${tableName} という表記に置き換えることができます。この表記の詳細については、「データベース間クエリ」の「オブジェクトのクエリ」セクションを参照してください。 https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html

    IAM
    GRANT SELECT ON ${schemaName}.${tableName} TO "IAMR:${serviceRole}";
    Database user
    GRANT SELECT ON ${schemaName}.${tableName} TO "${dbUser}";
    AWS Secrets Manager username
    GRANT SELECT ON ${schemaName}.${tableName} TO "${secretsUsername}";
  3. Redshift データベースに新しいスキーマを作成した場合は、次のコマンドを実行して、新しいスキーマに対する ID アクセス許可を付与します。

    GRANT USAGE ON SCHEMA ${schemaName} TO "IAMR:${serviceRole}";

Amazon Bedrock ナレッジベースサービスロールに AWS Glue Data Catalog データストアへのアクセスを許可するには、Amazon Redshift クエリエディタ v2 を使用して、次の SQL コマンドを実行します。

  1. 次のコマンドを実行します。CREATE USER を使用してデータベースユーザーを作成し、IAM による認証を許可します。${service-role} は、作成したカスタム Amazon Bedrock ナレッジベースサービスロールの名前に置き換えます。

    CREATE USER "IAMR:${service-role}" WITH PASSWORD DISABLE;
    重要

    コンソールで作成した Amazon Bedrock ナレッジベースサービスロールを使用してから、このステップを実行する前にデータストアを同期すると、ユーザーは自動的に作成されますが、データストアへのアクセス許可がユーザーに付与されていないため、同期は失敗します。同期する前に、次のステップを実行する必要があります。

  2. 次の GRANT コマンドを実行して、データベースから情報を取得するアクセス許可をサービスロールに付与します。

    GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:${serviceRole}";
    重要

    CREATEUPDATE、または アクセスを許可しないでくださいDELETE。これらのアクションを付与すると、データの意図しない変更につながる可能性があります。

  3. AWS Glue Data Catalog データベースへのアクセスを許可するには、サービスロールに次のアクセス許可をアタッチします。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "glue:GetDatabases", "glue:GetDatabase", "glue:GetTables", "glue:GetTable", "glue:GetPartitions", "glue:GetPartition", "glue:SearchTables" ], "Resource": [ "arn:aws:glue:${Region}:${Account}:table/${DatabaseName}/${TableName}", "arn:aws:glue:${Region}:${Account}:database/${DatabaseName}", "arn:aws:glue:${Region}:${Account}:catalog" ] } ] }
  4. 以下を実行して AWS Lake Formation 、 (Lake Formation とその Amazon Redshift との関係の詳細については、「Redshift のデータソース」を参照) を通じてサービスロールにアクセス許可を付与します。

    1. にサインインし AWS Management Console、https://console.aws.amazon.com/lakeformation/ で Lake Formation コンソールを開きます。

    2. 左側のナビゲーションペインからデータアクセス許可を選択します。

    3. Amazon Bedrock ナレッジベースに使用しているサービスロールにアクセス許可を付与します。

    4. データベースとテーブルの Describe および Select アクセス許可を付与します。

  5. 使用するデータソースによっては AWS Glue Data Catalog、そのデータソースにアクセスするためのアクセス許可を追加する必要がある場合があります (詳細については、AWS Glue 「他の への依存関係 AWS のサービス」を参照してください)。たとえば、データソースが Amazon S3 の場所にある場合は、上記のポリシーに次のステートメントを追加する必要があります。

    { "Sid": "Statement1", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::${BucketName}", "arn:aws:s3:::${BucketName}/*" ] }
  6. (オプション) AWS KMS を使用して Amazon S3 または のデータを暗号化する場合は AWS Glue Data Catalog、KMS キーのデータを復号化するためのアクセス許可をロールに追加する必要があります。

    { "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${Region}:${Account}:key/{KmsId}", "arn:aws:kms:${Region}:${Account}:key/{KmsId}" ], "Effect": "Allow" }