为 Amazon Bedrock 代理创建服务角色
要为代理使用自定义服务角色而不是 Amazon Bedrock 自动创建的角色,请按照创建向 AWS 服务委派权限的角色中的步骤创建 IAM 角色并附加以下权限。
-
信任策略
-
包含以下基于身份的权限的策略:
无论是否使用自定义角色,您都还需要将基于资源的策略附加到用于执行代理中的操作组任务的 Lambda 函数,以便为服务角色提供访问这些函数的权限。有关更多信息,请参阅 基于资源的策略,允许 Amazon Bedrock 调用操作组 Lambda 函数。
主题
信任关系
以下策略允许 Amazon Bedrock 担任此角色并创建和管理代理。根据需要替换 ${values}
。该策略在 Condition
字段中包含了可选的条件键(参阅 Amazon Bedrock 的条件键和 AWS 全局条件上下文键),建议您将其作为最佳安全实践使用。
注意
出于安全考虑,最佳做法是在创建完特定的代理 ID 后将 *
替换为该 ID。
{ "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 无服务器或 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 函数
按照在 Lambda 中使用基于资源的策略中的步骤执行操作,并将以下基于资源的策略附加到 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}
" } } } ] }