本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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}
" } } }