为 Amazon Bedrock Agents 创建服务角色 - Amazon Bedrock

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

为 Amazon Bedrock Agents 创建服务角色

要为代理使用自定义服务角色而不是 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),或者您的代理没有相关的知识库,请省略此声明。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow model invocation for orchestration", "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": "Allow access to action group API schemas in S3", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::bucket/path/to/schema" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "${account-id}" } } }, { "Sid": "Query associated knowledge bases", "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:RetrieveAndGenerate" ], "Resource": [ "arn:aws:bedrock:${region}:${account-id}:knowledge-base/knowledge-base-id" ] }, { "Sid": "Associate a third-party knowledge base with your agent", "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}" } } } ] }

(可选)基于身份的策略,允许 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}" } } } ] }