Amazon Bedrock ナレッジベースのサービスロールを作成する - Amazon Bedrock

Amazon Bedrock ナレッジベースのサービスロールを作成する

Amazon Bedrock が自動的に作成するロールの代わりに、ナレッジベース用のカスタムロールを使用するには、「AWS サービスにアクセス許可を委任するロールを作成する」の手順に従って IAM ロールを作成し、以下のアクセス許可をアタッチします。独自のセキュリティに必要なアクセス許可のみを含めるようにしてください。

注記

サービスロールを使用する場合、ポリシーを複数のロール間で共有することはできません。

  • 信頼関係

  • Amazon Bedrock のベースモデルへのアクセス

  • データを保存するデータソースへのアクセス

  • (Amazon OpenSearch Service でベクトルデータベースを作成する場合) OpenSearch Service コレクションへのアクセス許可

  • (Amazon Aurora でベクトルデータベースを作成する場合) Aurora クラスターへのアクセス

  • (Pinecone または Redis Enterprise Cloud でベクトルデータベースを作成する場合) AWS Secrets Manager で Pinecone または Redis Enterprise Cloud アカウントを認証するためのアクセス許可

  • (オプション) 以下のリソースを KMS キーで暗号化する場合、キーを復号化するアクセス許可 (「ナレッジベースリソースの暗号化」を参照)。

    • ナレッジベース

    • ナレッジベースのデータソース

    • Amazon OpenSearch Service のベクトルデータベース

    • AWS Secrets Manager にあるサードパーティのベクトルデータベースのシークレット

    • データインジェストジョブ

信頼関係

以下のポリシーにより、Amazon Bedrock がこのロールを引き受け、ナレッジベースを作成および管理することができます。使用するポリシーの例を下記に示します。1 つ以上のグローバル条件コンテキストキーを使用して、アクセス許可の範囲を制限できます。詳細については、「AWS グローバル条件コンテキストキー」を参照してください。aws:SourceAccount の値をアカウント ID に設定します。ArnEquals または ArnLike 条件を使用して、範囲を特定のナレッジベースに制限します。

注記

セキュリティ上のベストプラクティスとして、* は特定のナレッジベース ID に置き換えてください (作成後)。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/*" } } } ] }

Amazon Bedrock モデルにアクセスするためのアクセス許可

ロールがソースデータの組み込みに Amazon Bedrock モデルを使用するためのアクセス許可を提供するには、以下のポリシーをアタッチします。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:ListFoundationModels", "bedrock:ListCustomModels" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1", "arn:aws:bedrock:us-east-1::foundation-model/cohere.embed-english-v3", "arn:aws:bedrock:us-east-1::foundation-model/cohere.embed-multilingual-v3" ] } ] }

データソースにアクセスするためのアクセス許可

次のデータソースの中から選択して、ロールに必要なアクセス許可をアタッチしてください。

Amazon S3 データソースにアクセスするためのアクセス許可

データソースが Amazon S3 の場合は、次のポリシーをアタッチして、データソースとして接続する S3 バケットにアクセスするためのアクセス許可をロールに付与します。

データソースを AWS KMS キーで暗号化した場合は、「Amazon S3 のデータソースの AWS KMS キーを復号化するアクセス許可」の手順に従って、キーを復号するアクセス許可をロールにアタッチします。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "S3ListBucketStatement", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } }, { "Sid": "S3GetObjectStatement", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }

Confluence データソースにアクセスするためのアクセス許可

注記

Confluence データソースコネクタはプレビューリリースの段階であり、変更される可能性があります。

以下のポリシーをアタッチして、ロールが Confluence にアクセスするためのアクセス許可を付与します。

注記

secretsmanager:PutSecretValue は、OAuth 2.0 認証で更新トークンを使用する場合にのみ必要です。

Confluence OAuth2.0 のアクセストークンの有効期限は、デフォルトでは 60 分です。データソースの同期 (同期ジョブ) 中にアクセストークンの有効期限が切れた場合、Amazon Bedrock は、指定された更新トークンを使用してアクセストークンを再生成します。その際は、アクセストークンと更新トークンの両方が更新されます。現在の同期ジョブから次の同期ジョブまでトークンを最新の状態で維持するために、Amazon Bedrock にはシークレット認証情報の書き込み/保存のアクセス許可が必要です。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretId" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/KeyId" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.us-east-1.amazonaws.com" ] } } } ] }

Microsoft SharePoint データソースにアクセスするためのアクセス許可

注記

SharePoint データソースコネクタはプレビューリリースの段階であり、変更される可能性があります。

以下のポリシーをアタッチして、ロールが SharePoint にアクセスするためのアクセス許可を付与します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretId" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/KeyId" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.us-east-1.amazonaws.com" ] } } } ] }

Salesforce データソースにアクセスするためのアクセス許可

注記

Salesforce データソースコネクタはプレビューリリースの段階であり、変更される可能性があります。

以下のポリシーをアタッチして、ロールが Salesforce にアクセスするためのアクセス許可を付与します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretId" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/KeyId" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.us-east-1.amazonaws.com" ] } } } ] }

ドキュメントでチャットするためのアクセス許可

以下のポリシーをアタッチして、ロールが Amazon Bedrock モデルを使用してドキュメントでチャットするためのアクセス許可を付与します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": "*" } ] }

ユーザーにドキュメントでチャットするためのアクセス権のみを付与する場合は (すべてのナレッジベースでの RetrieveAndGenerate の権限は与えない)、以下のポリシーを使用します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "bedrock:Retrieve" ], "Resource": "*" } ] }

ドキュメントチャットと、特定のナレッジベースでの RetrieveAndGenerate の使用を両方とも認める場合は、${KnowledgeBaseArn} を指定して、以下のポリシーを使用します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "bedrock:Retrieve" ], "Resource": "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/$KnowledgeBaseId" } ] }

Amazon Kendra GenAI Index へのアクセス許可

ナレッジベース用の Amazon Kendra GenAI Index を作成した場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、インデックスへのアクセスを許可します。ポリシーで、${Partition}${Region}${AccountId}、${IndexId} をインデックスの値に置き換えます。複数のインデックスへのアクセスを許可するには、それらを Resource リストに追加します。AWS アカウント内のすべてのインデックスへのアクセスを許可するには、${IndexId} をワイルドカード (*) に置き換えます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kendra:Retrieve", "kendra:DescribeIndex" ], "Resource": "arn:aws:kendra:us-east-1:123456789012:index/${IndexId}" } ] }

Amazon OpenSearch Serverless 内のベクトルデータベースにアクセスするためのアクセス許可

OpenSearch Serverless でナレッジベース用のベクトルデータベースを作成した場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、コレクションへのアクセスを許可します。${Region}${AccountId} を、データベースが属するリージョンとアカウント ID に置き換えます。${CollectionId} には、Amazon OpenSearch Service のコレクションの ID を入力します。複数のコレクションへのアクセスを許可するには、それらを Resource リストに追加します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aoss:APIAccessAll" ], "Resource": [ "arn:aws:aoss:us-east-1:123456789012:collection/${CollectionId}" ] } ] }

OpenSearch マネージドクラスターでベクトルデータベースにアクセスするためのアクセス許可

OpenSearch マネージドクラスターでナレッジベース用のベクトルデータベースを作成した場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、ドメインへのアクセスを許可します。<region><accountId> を、データベースが属するリージョンとアカウント ID に置き換えます。複数のドメインへのアクセスを許可するには、それらを Resource リストに追加します。アクセス許可の設定については、「Amazon Bedrock ナレッジベースで OpenSearch マネージドクラスターを使用するために必要な前提条件とアクセス許可」を参照してください。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "es:ESHttpGet", "es:ESHttpPost", "es:ESHttpPut", "es:ESHttpDelete" ], "Resource": [ "arn:aws:es:us-east-1:123456789012:domain/domainName/indexName" ] }, { "Effect": "Allow", "Action": [ "es:DescribeDomain" ], "Resource": [ "arn:aws:es:us-east-1:123456789012:domain/domainName" ] } ] }

Amazon Aurora データベースクラスターにアクセスするためのアクセス許可

注記

Amazon Aurora クラスターは、Amazon Bedrock のナレッジベースが作成されるクラスターと同じ AWS アカウントに存在する必要があります。

Amazon Aurora でナレッジベース用のデータベース (DB) クラスターを作成した場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、DB クラスターへのアクセスを許可し、DB クラスターに対する読み取り/書き込みアクセス許可を提供します。${Region}${AccountId} を、DB クラスターが属するリージョンとアカウント ID に置き換えます。Amazon Aurora データベースクラスターの ID を ${DbClusterId} に入力します。複数の DB クラスターへのアクセスを許可するには、それらを Resource リストに追加します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "RdsDescribeStatementID", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters" ], "Resource": [ "arn:aws:rds:us-east-1:123456789012:cluster:${DbClusterId}" ] }, { "Sid": "DataAPIStatementID", "Effect": "Allow", "Action": [ "rds-data:BatchExecuteStatement", "rds-data:ExecuteStatement" ], "Resource": [ "arn:aws:rds:us-east-1:123456789012:cluster:${DbClusterId}" ] } ] }

Amazon Neptune Analytics でベクトルデータベースにアクセスするためのアクセス許可

ナレッジベース用の Amazon Neptune Analytics グラフを作成した場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、グラフへのアクセスを許可します。ポリシーで、${Region}${AccountId} を、データベースが属するリージョンとアカウント ID に置き換えます。${GraphId} をグラフデータベースの値に置き換えます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "NeptuneAnalyticsAccess", "Effect": "Allow", "Action": [ "neptune-graph:GetGraph", "neptune-graph:ReadDataViaQuery", "neptune-graph:WriteDataViaQuery", "neptune-graph:DeleteDataViaQuery" ], "Resource": [ "arn:aws:neptune-graph:us-east-1:123456789012:graph/${GraphId}" ] } ] }

Amazon S3 Vectors でベクトルストアにアクセスするためのアクセス許可

ナレッジベース用の Amazon S3 Vectors を作成した場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、ベクトルインデックスへのアクセスを許可します。

重要

Amazon S3 Vectors と Amazon Bedrock ナレッジベースの統合はプレビューリリース段階であり、変更される可能性があります。

ポリシーで、${Region}${AccountId} をベクトルインデックスが属するリージョンとアカウント ID に置き換えます。${BucketName} を S3 ベクトルバケットの名前に置き換え、${IndexName} をベクトルインデックスの名前に置き換えます。Amazon S3 ベクトルの詳細については、Amazon S3 Vectors を設定して使用する」を参照してください。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "S3VectorBucketReadAndWritePermission", "Effect": "Allow", "Action": [ "s3vectors:PutVectors", "s3vectors:GetVectors", "s3vectors:DeleteVectors", "s3vectors:QueryVectors", "s3vectors:GetIndex" ], "Resource": "arn:aws:s3vectors:us-east-1:123456789012:bucket/${BucketName}/index/${IndexName}" } ] }

AWS Secrets Manager シークレットが設定されたベクトルデータベースにアクセスするアクセス許可

ベクトルデータベースに AWS Secrets Manager シークレットが設定されている場合は、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチして、アカウントが AWS Secrets Manager によって認証され、データベースにアクセスできるようにします。${Region}${AccountId} を、データベースが属するリージョンとアカウント ID に置き換えます。${SecretId} をシークレットの ID に置き換えます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:123456789012:secret:${SecretId}" ] } ] }

これらのシークレットを AWS KMS キーで暗号化した場合は、ナレッジベースが格納されているベクトルストアの AWS Secrets Manager シークレットを復号するアクセス許可。 の手順に従ってキーを復号化するアクセス許可をロールにアタッチします。

AWS がデータインジェスト時の一時的なデータストレージ用の AWS KMS キーを管理できるようにするためのアクセス許可

データソースの取り込み中の一時的なデータストレージ用の AWS KMS キーを作成できるようにするには、以下のポリシーを Amazon Bedrock ナレッジベースのサービスロールにアタッチします。${Region}${AccountId}${KeyId} を適切な値に置き換えます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/${KeyId}" ] } ] }

別のユーザーの AWS アカウントからデータソースを管理するための AWS のアクセス許可

別のユーザーの AWS アカウントへのアクセスを許可するには、別のユーザーのアカウントで Amazon S3 バケットへのクロスアカウントアクセスを許可するロールを作成する必要があります。${BucketName}${BucketOwnerAccountId}${BucketNameAndPrefix} を適切な値に置き換えます。

ナレッジベースロールに必要なアクセス許可

ナレッジベースの作成時 (createKnowledgeBase) に指定するナレッジベースロールには、次の Amazon S3 アクセス許可が必要です。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "S3ListBucketStatement", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } }, { "Sid": "S3GetObjectStatement", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }

Amazon S3 バケットが AWS KMS キーを使用して暗号化されている場合は、ナレッジベースロールに以下も追加する必要があります。${BucketOwnerAccountId}${Region} を適切な値に置き換えます。

{ "Sid": "KmsDecryptStatement", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${Region}:${BucketOwnerAccountId}:key/${KeyId}" ], "Condition": { "StringEquals": { "kms:ViaService": [ "s3.${Region}.amazonaws.com" ] } } }

クロスアカウントの Amazon S3 バケットポリシーに必要なアクセス許可

他のアカウントのバケットに、次の Amazon S3 バケットポリシーが必要です。${KbRoleArn}${BucketName}${BucketNameAndPrefix} を適切な値に置き換えます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ListBucket", "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ] }, { "Sid": "GetObject", "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

クロスアカウント AWS KMS キーポリシーに必要なアクセス許可

クロスアカウントの Amazon S3 バケットがそのアカウントで AWS KMS キーを使用して暗号化されている場合、AWS KMS キーのポリシーには次のポリシーが必要です。${KbRoleArn}${KmsKeyArn} を適切な値に置き換えます。

{ "Sid": "Example policy", "Effect": "Allow", "Principal": { "AWS": [ "${KbRoleArn}" ] }, "Action": [ "kms:Decrypt" ], "Resource": "${KmsKeyArn}" }