Amazon Bedrock知识库创建失败:IAM权限拒绝问题求助
解决Amazon Bedrock创建知识库时的AccessDeniedException错误
问题场景
我编写了Python代码,用于基于S3存储桶文件创建Amazon Bedrock向量知识库,向量数据存储在MongoDB Atlas中。代码如下:
bedrock_client = boto3.client('bedrock-agent', region_name='us-east-2') def create_bedrock_knowledge_base(user_id, s3_bucket, collection_name): print('Creating Knowledge Base') response = bedrock_client.create_knowledge_base( clientToken=f"{user_id}-token".ljust(33, '0'), description=f"Creating knowledge base for user {user_id}", knowledgeBaseConfiguration = { 'type': 'VECTOR', 'vectorKnowledgeBaseConfiguration': { 'embeddingModelArn': 'arn:aws:bedrock:us-east-2:aws:model/amazon.titan-embed-text-v2:0', 'embeddingModelConfiguration': { 'bedrockEmbeddingModelConfiguration': { 'dimensions': 1024 } } } }, name=f"KnowledgeBase_{user_id}", roleArn='<iam_arn>', storageConfiguration = { 'mongoDbAtlasConfiguration': { 'collectionName': collection_name, 'credentialsSecretArn': '<secreat_Arn>', 'databaseName': 'bedrock', 'endpoint': 'mongodb+srv://<username>:<pwd>@<project>.<id>.mongodb.net', 'fieldMapping': { 'metadataField': 'metadata', 'textField': 'text', 'vectorField': 'embedding', }, 'vectorIndexName': 'vector_index', }, 'type': 'MONGO_DB_ATLAS', } ) return response['knowledgeBaseArn']
执行代码时触发以下错误:
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the CreateKnowledgeBase operation: User: <iam_arn> is not authorized to perform: bedrock:CreateKnowledgeBase
已尝试过更换S3桶和模型的区域、启用Titan嵌入模型、附加AmazonBedrockFullAccess权限策略,甚至手动添加权限,但InvokeModel操作正常,仅CreateKnowledgeBase报错。
解决方案
1. 确认权限关联的IAM身份
注意:需要拥有bedrock:CreateKnowledgeBase权限的是执行代码的IAM身份(比如本地AWS配置的用户、服务器的IAM角色),而非代码中roleArn指定的Bedrock服务角色。
- 检查执行代码的身份是否正确附加了包含
bedrock:CreateKnowledgeBase的权限策略,比如手动添加以下策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "bedrock:CreateKnowledgeBase", "Resource": "*" } ] } - 验证权限是否生效:调用
bedrock_client.list_knowledge_bases(),若同样报错则说明权限未正确配置到执行身份。
2. 检查区域支持情况
Bedrock知识库功能并非在所有AWS区域可用,us-east-2可能存在支持限制。建议切换到官方明确支持的区域(如us-east-1、us-west-2)重新测试。
3. 排查IAM权限边界限制
如果执行代码的IAM身份设置了权限边界(Permission Boundary),即使附加了AmazonBedrockFullAccess,权限边界也会限制实际可执行的操作。需确认权限边界是否允许bedrock:CreateKnowledgeBase动作。
4. 检查组织级SCP策略
若AWS账号属于AWS组织,需确认组织的服务控制策略(SCP)未限制bedrock:CreateKnowledgeBase操作。联系管理员检查SCP配置,确保该动作未被拒绝。
5. 验证客户端凭证正确性
确认boto3初始化时使用的凭证属于拥有对应权限的IAM身份:
- 本地环境检查
~/.aws/credentials和~/.aws/config配置是否正确; - 服务器/容器环境检查IAM角色是否正确关联,且角色拥有对应权限。
内容的提问来源于stack exchange,提问作者Nishtha
相关产品推荐
相关产品推荐

