在 Amazon Bedrock 中为提示流程创建服务角色 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon Bedrock 中为提示流程创建服务角色

要在 Amazon Bedrock 中创建和管理提示流程,您必须使用具有本页所列必要权限的服务角色。您可以使用 Amazon Bedrock 在控制台中自动为您创建的服务角色,也可以使用您自己自定义的服务角色。

注意

如果您使用 Amazon Bedrock 在控制台中自动为您创建的服务角色,那么如果您向流程中添加节点并保存流程,它将动态附加权限。但是,如果您移除节点,权限将不会被删除,因此您必须删除不再需要的权限。要管理为您创建的角色的权限,请按照 IAM 用户指南中的修改角色中的步骤进行操作。

要为 Prompt flows 创建自定义服务角色,请按照创建角色向 AWS 服务委派权限中的步骤创建 IAM 角色。然后将以下权限附加到该角色。

  • 信任策略

  • 以下基于身份的权限:

    • 访问提示流程将使用的 Amazon Bedrock 基础模型。将提示流中使用的每个模型添加到Resource列表中。

    • 如果您使用预配置吞吐量调用模型,则具有访问和调用预配置模型的权限。将提示流中使用的每个模型添加到Resource列表中。

    • 如果您调用自定义模型,则具有访问和调用自定义模型的权限。将提示流中使用的每个模型添加到Resource列表中。

    • 权限基于您添加到流程中的节点:

      • 如果您包括使用提示管理中提示符的提示节点,则具有访问提示的权限。将提示流中使用的每个提示添加到Resource列表中。

      • 如果您包含知识库节点,则为查询知识库的权限。将提示流中查询的每个知识库添加到Resource列表中。

      • 如果包括代理节点,则为调用代理别名的权限。将提示流中调用的每个代理添加到Resource列表中。

      • 如果您包含 S3 检索节点,则允许访问将从中检索数据的 Amazon S3 存储桶。将从中检索数据的每个存储桶添加到Resource列表中。

      • 如果您包含 S3 存储节点,则允许写入存储输出数据的 Amazon S3 存储桶。将写入数据的每个存储桶添加到Resource列表中。

      • 如果您加密了在提示流中调用的任何资源,则解密密钥的权限。将每个密钥添加到Resource列表中。

您可能还需要附加以下基于资源的策略:

  • 如果您包含 Lambda 函数节点,请将基于资源的策略附加到 Lambda 函数,提示流调用该策略为服务角色提供访问该函数的权限。有关更多信息,请参阅 基于资源的策略,允许 Amazon Bedrock 调用操作组 Lambda 函数

  • 如果您包含 Amazon Lex 节点,请将基于资源的策略附加到 Amazon Lex 机器人,提示流调用该策略为服务角色提供访问 Amazon Lex 机器人的权限。有关更多信息,请参阅 Amazon Lex 基于资源的策略示例

  • 如果您对提示流进行加密,请将密钥策略附加到用于加密提示流的 KMS 密钥。

信任关系

将以下信任策略附加到提示流程执行角色,以允许 Amazon Bedrock 担任此角色并管理提示流程。根据需要替换这些。该策略在Condition字段中包含可选的条件键(请参阅 Amazon Bedrock条件密钥和AWS 全局条件上下文密钥),我们建议您将其用作安全最佳实践。

注意

作为最佳实践,请在创建提示流 ID 后将 * 替换为提示流 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FlowsTrustBedrock", "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "${account-id}" }, "ArnLike": { "AWS:SourceArn": "arn:aws:bedrock:${region}:${account-id}:flow/*" } } } ] }

Flows 服务角色的基于身份的权限。

附加以下策略以为服务角色提供权限,并根据需要替换。该政策包含以下声明。如果语句不适用于您的用例,则将其省略。该策略在Condition字段中包含可选的条件键(请参阅 Amazon Bedrock条件密钥和AWS 全局条件上下文密钥),我们建议您将其用作安全最佳实践。

  • 访问提示流程将使用的 Amazon Bedrock 基础模型。将提示流中使用的每个模型添加到Resource列表中。

  • 如果您使用预配置吞吐量调用模型,则具有访问和调用预配置模型的权限。将提示流中使用的每个模型添加到Resource列表中。

  • 如果您调用自定义模型,则具有访问和调用自定义模型的权限。将提示流中使用的每个模型添加到Resource列表中。

  • 权限基于您添加到流程中的节点:

    • 如果您包括使用提示管理中提示符的提示节点,则具有访问提示的权限。将提示流中使用的每个提示添加到Resource列表中。

    • 如果您包含知识库节点,则为查询知识库的权限。将提示流中查询的每个知识库添加到Resource列表中。

    • 如果包括代理节点,则为调用代理别名的权限。将提示流中调用的每个代理添加到Resource列表中。

    • 如果您包含 S3 检索节点,则允许访问将从中检索数据的 Amazon S3 存储桶。将从中检索数据的每个存储桶添加到Resource列表中。

    • 如果您包含 S3 存储节点,则允许写入存储输出数据的 Amazon S3 存储桶。将写入数据的每个存储桶添加到Resource列表中。

    • 如果您加密了在提示流中调用的任何资源,则解密密钥的权限。将每个密钥添加到Resource列表中。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvokeModel", "Effect": "Allow", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:${region}::foundation-model/${model-id}" ] }, { "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetProvisionedModelThroughput" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:provisioned-model/${model-id}" ] }, { "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetCustomModel" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:custom-model/${model-id}" ] }, { "Sid": "UsePromptManagement", "Effect": "Allow", "Action": [ "bedrock:GetPrompt" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:prompt/${prompt-id}" ] }, { "Sid": "QueryKnowledgeBase", "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:RetrieveAndGenerate" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:knowledge-base/knowledge-base-id" ] }, { "Sid": "InvokeAgent", "Effect": "Allow", "Action": [ "bedrock:InvokeAgent" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:agent-alias/${agent-alias-id}" ] }, { "Sid": "AccessS3Bucket", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::${bucket-name}/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "${account-id}" } } }, { "Sid": "WriteToS3Bucket", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::${bucket-name}", "arn:aws:s3:::${bucket-name}/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "${account-id}" } } }, { "Sid": "KMSPermissions", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${region}:${account-id}:key/${key-id}" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "${account-id}" } } } ] }

基于资源的即时流策略

如果您在提示流中包含 Lambda 函数节点或 Amazon Lex 节点,则必须将以下策略附加到每个资源,以便在调用提示流时允许 Amazon Bedrock 对其进行访问。

基于资源的策略,允许 Amazon Bedrock 在调用提示流时调用 Lambda 函数

按照对 Lamb da 使用基于资源的策略中的步骤操作,将以下基于资源的策略附加到 Lambda 函数,以允许 Amazon Bedrock 访问您的提示流的 Lambda 函数,必要时替换这些值。该策略在Condition字段中包含可选的条件键(请参阅 Amazon Bedrock条件密钥和AWS 全局条件上下文密钥),我们建议您将其用作安全最佳实践。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowBedrockToAccessLambdaFunction", "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:${region}:${account-id}:function:${function-name}", "Condition": { "StringEquals": { "AWS:SourceAccount": "${account-id}" }, "ArnLike": { "AWS:SourceArn": "arn:aws:bedrock:${region}:${account-id}:flows/${flow-id}" } } }] }

基于资源的政策,允许亚马逊 Bedrock 调用 Amazon Lex 机器人

按照 Amazon Lex 基于资源的策略示例中的步骤操作,将以下基于资源的策略附加到 Amazon Lex 机器人,以允许 Amazon Bedrock 在提示流程中调用该策略,必要时替换。该策略在Condition字段中包含可选的条件键(请参阅 Amazon Bedrock条件密钥和AWS 全局条件上下文密钥),我们建议您将其用作安全最佳实践。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBedrockToAccessLexBot", "Effect": "Allow", "Principal": { "Service": [ "bedrock.amazonaws.com" ] }, "Action": [ "lex:RecognizeUtterance" ], "Resource": [ "arn:aws:lex:${region}:${account-id}:bot-alias/${bot-id}/${bot-alias-id}" ], "Condition": { "StringEquals": { "AWS:SourceAccount": ${account-id} }, "ArnEquals": { "AWS:SourceArn": "arn:aws:bedrock:${region}:${account-id}:flows/${flow-id}" } } } ]

允许 Amazon Bedrock 加密和解密流程的密钥策略

按照创建密钥策略中的步骤操作,将以下密钥策略附加到 KMS 密钥,以允许 Amazon Bedrock 使用密钥加密和解密流程,必要时替换。该策略在Condition字段中包含可选的条件键(请参阅 Amazon Bedrock条件密钥和AWS 全局条件上下文密钥),我们建议您将其用作安全最佳实践。

{ "Sid": "EncryptFlowKMS", "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext": "arn:aws:bedrock:${region}:${account-id}:flow/${flow-id}" } } }