跳至內容

如何授予 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 角色具有 AmazonBedrockFullAccess政策,以允許 Amazon Bedrock 存取權。
  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 參數來修改持續時間。持續時間不能超過角色的工作階段持續時間上限。