Quiero usar la API de Amazon Bedrock en varias cuentas de AWS.
Descripción corta
Cuando utilizas la API de Amazon Bedrock en varias cuentas, administras los permisos del cliente de la API en una cuenta y alojas las cargas de trabajo en otras cuentas.
Antes de configurar el acceso entre cuentas a la API de Amazon Bedrock, asegúrate de que puedes acceder a los modelos fundacionales. Para solicitar acceso, consulta Add model access (Adición de acceso a un modelo).
Nota: Para obtener información sobre las prácticas recomendadas para varias cuentas, consulta Prácticas recomendadas de seguridad en AWS Identity and Access Management (IAM).
Resolución
En la siguiente resolución, la cuenta A contiene los modelos fundacionales. La cuenta B contiene el cuaderno de Amazon SageMaker que invoca la API de Amazon Bedrock en la cuenta A para acceder a los modelos fundacionales.
Cuenta A
Para crear un rol de IAM que brinde acceso a Amazon Bedrock, completa los siguientes pasos:
- Abre la consola de IAM.
- Crea un rol de IAM para la cuenta A.
- Asegúrate de el rol de IAM tenga la política AmazonBedrockFullAccess para permitir el acceso a Amazon Bedrock.
- Añade los permisos para invocar el cuaderno de SageMaker en la cuenta 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"
}
]
}
Cuenta B
Para asumir el rol en la cuenta A, completa los pasos siguientes:
- Abre la consola de IAM.
- Crea un rol de IAM para que el cuaderno de SageMaker se ponga en marcha en la cuenta.
- Asegúrate de que la política de IAM permita que el rol de la cuenta B asuma el rol de la cuenta A:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::`<Account A ID>`:role/RoleA"
]
}
]
}
Tras la configuración, el rol de la cuenta B usa credenciales temporales de Boto3 para asumir el rol de la cuenta A.
Prueba de la configuración desde la cuenta B
Usa el rol adjunto a la política de IAM de la cuenta B para poner en marcha la siguiente celda en cualquier cuaderno de 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')
El cliente de Amazon Bedrock ahora puede usar las credenciales temporales del rol de la cuenta A para llamar a las API.
Prácticas recomendadas
Cuando utilices la API de Amazon Bedrock entre cuentas, aplica las siguientes prácticas recomendadas:
- Consulta los registros de AWS CloudTrail para ver si hay errores y verificaciones. Los registros muestran los eventos AssumeRole de AWS Security Token Service (STS) de la cuenta B y los eventos de Amazon Bedrock de la cuenta A.
- La duración predeterminada del rol asumido es de 1 hora. Sin embargo, puedes usar el parámetro DurationSeconds para modificar la duración. La duración no puede superar la duración máxima de la sesión del rol.