使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何授予 Amazon Bedrock API 跨账户访问权限?

2 分钟阅读
0

我想在多个 AWS 账户中使用 Amazon Bedrock API。

简短描述

当您跨账户使用 Amazon Bedrock API 时,您可以在一个账户中管理 API 客户端的权限,并在其他账户中托管您的工作负载。

在为 Amazon Bedrock API 设置跨账户访问权限之前,请确保您可以访问基础模型。要申请访问权限,请参阅添加模型访问权限

**注意:**有关跨账户最佳实践的信息,请参阅 AWS Identity and Access Management (IAM) 中的安全最佳实践

解决方法

在以下分辨率中,账户 A 包含基础模型。账户 B 包含 Amazon SageMaker 笔记本,该笔记本调用账户 A 中的 Amazon Bedrock API 来访问基础模型。

账户 A

要创建提供 Amazon Bedrock 访问权限的 IAM 角色,请完成以下步骤:

  1. 打开 IAM 控制台
  2. 为账户 A 创建 IAM 角色。
  3. 确保 IAM 角色拥有允许访问 Amazon Bedrock 的 AmazonBedrockFullAccess 策略。
  4. 在账户 B 中添加调用 SageMaker 笔记本的权限:

    {    
       "Version":"2012-10-17",  
       "Statement":[    
          {    
             "Effect":"Allow",  
             "Principal":{    
                "Service":[    
                   "sagemaker.amazonaws.com",  
                   "events.amazonaws.com",  
                   "bedrock.amazonaws.com"  
                ],  
                "AWS":[    
                   "arn:aws:iam::`<Account B ID>`:role/RoleB"  
                ]  
             },  
             "Action":"sts:AssumeRole"       
          }  
       ]  
    }  

账户 B

要代入账户 A 中的角色,请完成以下步骤:

  1. 打开 IAM 控制台
  2. 为 SageMaker 笔记本创建 IAM 角色以在账户中运行。
  3. 确保 IAM 策略允许账户 B 中的角色代入账户 A 中的角色:
        {  
            "Version": "2012-10-17",  
                "Statement": [  
                    {  
                        "Effect": "Allow",  
                        "Action": [  
                            "sts:AssumeRole"  
                        ],  
                        "Resource": [  
                            "arn:aws:iam::`<Account A ID>`:role/RoleA"   
                        ]  
                    }  
                ]  
         }

配置完成后,账户 B 中的角色使用临时 Boto3 凭证来代入账户 A 中的角色。

从账户 B 测试设置

使用账户 B 中附加到 IAM 策略的角色在任何 SageMaker 笔记本上运行以下单元:

import boto3  

# ARN of Role A to assume  
role_to_assume = 'arn:aws:iam::`<Account A ID>`:role/RoleA'    

# Use STS to assume role  
credentials = boto3.client('sts').assume_role(  
    RoleArn=role_to_assume,  
    RoleSessionName='RoleBSession'  
)['Credentials']  

# Create Bedrock client with temporary credentials  
bedrock_session = boto3.session.Session(  
    aws_access_key_id=credentials['AccessKeyId'],  
    aws_secret_access_key=credentials['SecretAccessKey'],  
    aws_session_token=credentials['SessionToken']  
)  

bedrock = bedrock_session.client('bedrock-runtime')

Amazon Bedrock 客户端现在可以使用账户 A 中角色的临时凭证来调用 API。

最佳实践

当您跨账户使用 Amazon Bedrock API 时,请应用以下最佳实践:

  • 检查 AWS CloudTrail 日志中是否存在错误和验证。该日志显示账户 B 中的 AWS Security Token Service (STS) AssumeRole 事件和账户 A 中的 Amazon Bedrock 事件。
  • 已代入角色的默认持续时间为 1 小时。但是,您可以使用 DurationSeconds 参数修改持续时间。持续时间不能超过角色的最大会话持续时间
AWS 官方
AWS 官方已更新 8 个月前