本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon Bedrock 中为亚马逊 Bedrock Flows 创建服务角色
要在 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 Lambda Amazon 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 之前创建了任何使用提示资源的流程,则应使用权限更新您的 Amazon Bedrock Flows 服务角色。bedrock:RenderPrompt
如果您使用的是 Amazon Bedrock 在控制台中自动为您创建的服务角色,Amazon Bedrock 将在您保存流程时动态附加更正后的权限。
信任关系
将以下信任策略附加到流程执行角色,以允许 Amazon Bedrock 担任此角色并管理流程。根据需要values
更换。该策略在 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/*
" } } } ] }
工作流服务角色的基于身份的权限。
附加以下策略以为服务角色提供权限,并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
列表中。
-
{ "Version": "2012-10-17", "Statement": [ { "Sid": "
InvokeModel
", "Effect": "Allow", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:${region}
::foundation-model/${model-id}
" ] }, { "Sid": "InvokeProvisionedThroughput
", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetProvisionedModelThroughput" ], "Resource": [ "arn:aws:bedrock:${region}
:${account-id}
:provisioned-model/${model-id}
" ] }, { "Sid": "InvokeCustomModel
", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetCustomModel" ], "Resource": [ "arn:aws:bedrock:${region}
:${account-id}
:custom-model/${model-id}
" ] }, { "Sid": "UsePromptFromPromptManagement
", "Effect": "Allow", "Action": [ "bedrock:RenderPrompt" ], "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": "GuardrailPermissions
", "Effect": "Allow", "Action": "Action": [ "bedrock:ApplyGuardrail" ], "Resource": [ "arn:${Partition}
:bedrock:${Region}
:${Account}
:guardrail/${GuardrailId}
" ] }, { "Sid": "LambdaPermissions
", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:${region}
:${account-id}
:function:${function-name}
" ] }, { "Sid": "AmazonLexPermissions
", "Effect": "Allow", "Action": [ "lex:RecognizeUtterance" ], "Resource": [ "arn:aws:lex:${region}
:${account-id}
:bot-alias/${bot-id}
/${bot-alias-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}
" } } } ] }
允许 Amazon Bedrock 对流量进行加密和解密的密钥政策
按照创建密钥策略中的步骤操作,将以下密钥策略附加到密钥上,以允许 Amazon Bedrock 使用密钥加密和解密流程,必要时将其替换。KMS values
该策略在 Condition
字段中包含了可选的条件键(参阅 Amazon Bedrock 的条件键和 AWS 全局条件上下文键),建议您将其作为最佳安全实践使用。
{ "Sid": "EncryptFlowKMS", "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:bedrock-flows:arn": "arn:
${partition}
:bedrock:${region}
:${account-id}
:flow/${flow-id}
" } } }