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

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

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

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

注意

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

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

  • 信任策略

  • 以下基于身份的权限:

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

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

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

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

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

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

      • 如果您包含代理节点,则需要拥有调用代理别名的权限。将流中调用的每个代理添加到 Resource 列表。

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

      • 如果您包含 S3 存储节点,则需要拥有对存储输出数据的 Amazon S3 存储桶的写入权限。将要写入数据的每个存储桶添加到 Resource 列表。

      • 如果您为知识库节点或提示节点包含护栏,则需要在流中应用护栏的权限。将流中使用的每个护栏添加到 Resource 列表。

      • 如果您添加了 Lambda 节点,则需要调用 Lambda 函数的权限。将需要调用的每个 Lambda 函数添加到 Resource 列表。

      • 如果您添加了 Amazon Lex 节点,则需要使用 Amazon Lex 机器人的权限。将需要使用的每个机器人别名添加到 Resource 列表。

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

  • 如果您加密了流,则还需要将密钥策略附加到用于加密流的 KMS 密钥。

注意

最近实施了以下变更:

  • 以前,AWS LambdaAmazon Lex 资源是使用 Amazon Bedrock 服务主体调用的。对于在 2024-11-22 之后创建的流程,这种行为正在发生变化,Amazon Bedrock Flows 服务角色将用于调用和 Amazon AWS Lambda Lex 资源。如果您在 2024 年 11 月 22 日之前创建了任何使用这两种资源的流程,则应使用和 Amazon AWS Lambda Lex 权限更新您的 Amazon Bedrock Flows 服务角色。

  • 以前,提示管理器资源是使用 bedrock:GetPrompt 操作呈现的。对于在 2024 年 11 月 22 日之后创建的流,此行为将发生变化,届时将使用 bedrock:RenderPrompt 操作来呈现提示资源。如果您在 2024 年 11 月 22 日之前创建了使用提示资源的流,则应使用 bedrock:RenderPrompt 权限更新您的 Amazon Bedrock 流服务角色。

如果您使用了 Amazon Bedrock 在控制台中自动为您创建的服务角色,当您保存流时,Amazon Bedrock 会动态附加连接的权限。

信任关系

将以下信任策略附加到流执行角色,以允许 Amazon Bedrock 担任此角色并管理流。根据需要values更换。该策略在 Condition 字段中包含了可选的条件键(参阅 Amazon Bedrock 的条件键AWS 全局条件上下文键),建议您将其作为最佳安全实践使用。

注意

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

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "FlowsTrustBedrock", "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:flow/*" } } } ] }

工作流服务角色的基于身份的权限。

附加以下策略以为服务角色提供权限,并values根据需要进行替换。策略包含以下语句。如果某个语句不适用于您的应用场景,可以省略。该策略在 Condition 字段中包含了可选的条件键(参阅 Amazon Bedrock 的条件键AWS 全局条件上下文键),建议您将其作为最佳安全实践使用。

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

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

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

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

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

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

    • 如果您包含代理节点,则需要拥有调用代理别名的权限。将流中调用的每个代理添加到 Resource 列表。

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

    • 如果您包含 S3 存储节点,则需要拥有对存储输出数据的 Amazon S3 存储桶的写入权限。将要写入数据的每个存储桶添加到 Resource 列表。

    • 如果您为知识库节点或提示节点包含护栏,则需要在流中应用护栏的权限。将流中使用的每个护栏添加到 Resource 列表。

    • 如果您添加了 Lambda 节点,则需要调用 Lambda 函数的权限。将需要调用的每个 Lambda 函数添加到 Resource 列表。

    • 如果您添加了 Amazon Lex 节点,则需要使用 Amazon Lex 机器人的权限。将需要使用的每个机器人别名添加到 Resource 列表。

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

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "InvokeModel", "Effect": "Allow", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/ModelId" ] }, { "Sid": "InvokeProvisionedThroughput", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetProvisionedModelThroughput" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/ModelId" ] }, { "Sid": "InvokeCustomModel", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetCustomModel" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:custom-model/ModelId" ] }, { "Sid": "UsePromptFromPromptManagement", "Effect": "Allow", "Action": [ "bedrock:RenderPrompt" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:prompt/PromptId" ] }, { "Sid": "QueryKnowledgeBase", "Effect": "Allow", "Action": [ "bedrock:Retrieve" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/KnowledgeBaseId" ] }, { "Sid": "InvokeAgent", "Effect": "Allow", "Action": [ "bedrock:InvokeAgent" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:agent-alias/AgentId/AgentAliasId" ] }, { "Sid": "AccessS3Bucket", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } }, { "Sid": "WriteToS3Bucket", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } }, { "Sid": "GuardrailPermissions", "Effect": "Allow", "Action": [ "bedrock:ApplyGuardrail" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:guardrail/GuardrailId" ] }, { "Sid": "LambdaPermissions", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:FunctionId" ] }, { "Sid": "AmazonLexPermissions", "Effect": "Allow", "Action": [ "lex:RecognizeUtterance" ], "Resource": [ "arn:aws:lex:us-east-1:123456789012:bot-alias/BotId/BotAliasId" ] }, { "Sid": "KMSPermissions", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/KeyId" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }