Je souhaite utiliser l'API Amazon Bedrock sur plusieurs comptes AWS.
Brève description
Lorsque vous utilisez l'API Amazon Bedrock sur plusieurs comptes, vous gérez les autorisations du client API sur un compte et vous hébergez vos charges de travail sur d'autres comptes.
Avant de configurer l'accès intercompte pour votre API Amazon Bedrock, assurez-vous de pouvoir accéder aux modèles de fondation. Pour demander un accès, consultez la section Ajouter un accès au modèle.
Remarque : Pour plus d'informations sur les bonnes pratiques relatives à l’accès intercompte, consultez la section Bonnes pratiques relatives à AWS Identity and Access Management (IAM).
Résolution
Dans la résolution suivante, le compte A contient les modèles de fondation. Le compte B contient le bloc-notes Amazon SageMaker qui appelle l'API Amazon Bedrock dans le compte A pour accéder aux modèles de fondation.
Compte A
Pour créer un rôle IAM qui donne accès à Amazon Bedrock, procédez comme suit :
- Ouvrez la console IAM.
- Créez un rôle IAM pour le compte A.
- Assurez-vous que le rôle IAM dispose de la politique AmazonBedrockFullAccess pour autoriser l'accès à Amazon Bedrock.
- Ajouter les autorisations nécessaires pour appeler le bloc-notes SageMaker dans le compte B :
{
"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"
}
]
}
Compte B
Pour assumer le rôle dans le compte A, procédez comme suit :
- Ouvrez la console IAM.
- Créez un rôle IAM pour que le bloc-notes SageMaker soit exécuté dans le compte.
- Assurez-vous que la politique IAM autorise le rôle du compte B à endosser le rôle du compte A :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::`<Account A ID>`:role/RoleA"
]
}
]
}
Après la configuration, le rôle dans le compte B utilise des informations d'identification Boto3 temporaires pour endosser le rôle dans le compte A.
Tester la configuration depuis le compte B
Utilisez le rôle associé à la politique IAM dans le compte B pour exécuter la cellule suivante sur n'importe quel bloc-notes 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')
Le client Amazon Bedrock peut désormais utiliser les informations d'identification temporaires du rôle dans le compte A pour appeler des API.
Bonnes pratiques
Lorsque vous utilisez l'API Amazon Bedrock sur plusieurs comptes, appliquez les bonnes pratiques suivantes :
- Consultez les journaux AWS CloudTrail pour détecter les erreurs et procéder à des vérifications. Les journaux indiquent les événements AssumeRole AWS Security Token Service (STS) sur le compte B et les événements Amazon Bedrock sur le compte A.
- La durée par défaut du rôle endossé est d'une heure. Toutefois, vous pouvez utiliser le paramètre DurationSeconds pour modifier la durée. La durée ne peut pas dépasser la durée de session maximale du rôle.