为 Amazon Bedrock 代理创建服务角色 - Amazon Bedrock

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

为 Amazon Bedrock 代理创建服务角色

要为代理使用自定义服务角色而不是 Amazon Bedrock 自动创建的IAM角色,请按照创建向 AWS 服务委派权限的角色中的步骤创建一个角色并附加以下权限

  • 信任策略

  • 包含以下基于身份的权限的策略:

    • 对 Amazon Bedrock 基础模型的访问权限。

    • 访问包含以下内容的 Amazon S3 对象 OpenAPI 代理中操作组的架构。

    • Amazon Bedrock 查询要附加到代理的知识库的权限。

    • 如果以下任何一种情况与您的应用场景相关,请将该语句添加到策略中,或将包含该语句的策略添加到服务角色中:

      • (可选)如果您将预调配吞吐量与代理别名关联,则需要权限来使用该预调配吞吐量进行模型调用。

      • (可选)如果您将防护机制与代理关联,则需要权限来应用该防护机制。如果护栏使用KMS密钥加密,则服务角色还需要解密密钥的权限

      • (可选)如果您使用密KMS钥加密代理,则具有解密密钥的权限

无论是否使用自定义角色,您都还需要将基于资源的策略附加到用于执行代理中的操作组任务的 Lambda 函数,以便为服务角色提供访问这些函数的权限。有关更多信息,请参阅 基于资源的策略,允许 Amazon Bedrock 调用操作组 Lambda 函数

信任关系

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

注意

出于安全考虑,最佳做法是在创建特定的代理IDs之后将其替换为特定的代理。*

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

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

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

注意

如果您使用客户管理的KMS密钥加密代理,请参阅代理资源的加密以了解需要添加的更多权限。

  • 借助 Amazon Bedrock 基础模型对代理编排中使用的提示进行模型推断的权限。

  • 在 Amazon S3 中访问您的代理的操作组API架构的权限。如果您的代理没有操作组,请省略此语句。

  • 访问与代理关联的知识库的权限。如果您的代理没有关联的知识库,请省略此语句。

  • 访问第三方的权限 (Pinecone 或 Redis Enterprise Cloud) 与您的代理相关的知识库。如果您的知识库是第一方(Amazon OpenSearch Serverless 或 Amazon Aurora),或者您的代理没有相关的知识库,请省略此声明。

  • 从 Prompt 管理中访问提示的权限。如果您不打算在 Amazon Bedrock 控制台中与您的代理一起测试提示管理中的提示,请省略此语句。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentModelInvocationPermissions", "Effect": "Allow", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:${region}::foundation-model/anthropic.claude-v2", "arn:aws:bedrock:${region}::foundation-model/anthropic.claude-v2:1", "arn:aws:bedrock:${region}::foundation-model/anthropic.claude-instant-v1" ] }, { "Sid": "AgentActionGroupS3", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::bucket/path/to/schema" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "${account-id}" } } }, { "Sid": "AgentKnowledgeBaseQuery", "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:RetrieveAndGenerate" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:knowledge-base/knowledge-base-id" ] }, { "Sid": "Agent3PKnowledgeBase", "Effect": "Allow", "Action": [ "bedrock:AssociateThirdPartyKnowledgeBase", ], "Resource": "arn:aws:bedrock:${region}:${account-id}:knowledge-base/knowledge-base-id", "Condition": { "StringEquals" : { "bedrock:ThirdPartyKnowledgeBaseCredentialsSecretArn": "arn:aws:kms:${region}:${account-id}:key/${key-id}" } } }, { "Sid": "AgentPromptManagementConsole", "Effect": "Allow", "Action": [ "bedrock:GetPrompt", ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:prompt/prompt-id" ] }, ] }

(可选)基于身份的策略,允许 Amazon Bedrock 使用与代理别名关联的预调配吞吐量

如果您将预调配吞吐量与代理别名关联,请将以下基于身份的策略附加到服务角色或将该语句添加到代理服务角色的基于身份的权限。部分的策略中。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Use a Provisioned Throughput in model invocation", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:GetProvisionedModelThroughput" ], "Resource": [ "arn:aws:bedrock:{${region}}:{${account-id}}:${provisioned-model-id}" ] } ] }

(可选)基于身份的策略,允许 Amazon Bedrock 使用与代理关联的防护机制

如果您将防护机制与代理关联,则需要将以下基于身份的策略附加到服务角色或将该语句添加到代理服务角色的基于身份的权限。部分的策略中。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Apply a guardrail to your agent", "Effect": "Allow", "Action": "bedrock:ApplyGuardrail", "Resource": [ "arn:aws:bedrock:{${region}}:{${account-id}}:guardrail/${guardrail-id}" ] } ] }

(可选)基于身份的策略,允许 Amazon Bedrock 访问 S3 中的文件以用于代码解释

如果您启用了 在 Amazon Bedrock 中启用代码解释,请将以下基于身份的策略附加到服务角色,或者将该语句添加到代理服务角色的基于身份的权限部分的策略中。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AmazonBedrockAgentFileAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectVersionAttributes", "s3:GetObjectAttributes" ], "Resource": [ "arn:aws:s3:::[[customerProvidedS3BucketWithKey]]" ] } ] }

基于资源的策略,允许 Amazon Bedrock 调用操作组 Lambda 函数

按照对 Lamb da 使用基于资源的策略中的步骤操作,将以下基于资源的策略附加到 Lambda 函数,以允许 Amazon Bedrock 访问代理操作组的 Lambda 函数,必要时将其替换。${values}该策略在 Condition 字段中包含了可选的条件键(参阅 Amazon Bedrock 的条件键AWS 全局条件上下文键),建议您将其作为最佳安全实践使用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Amazon Bedrock to access action group Lambda function", "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}:agent/${agent-id}" } } } ] }