¿Cómo asumir un rol de AWS desde otro rol de AWS?

Tengo dos cuentas de AWS, digamos A y B.

En la cuenta B, tengo un rol definido que permite el acceso a otro rol desde la cuenta A. Vamos a llamarlo Rol-B

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:role/RoleA"
     },
    "Action": "sts:AssumeRole"
  }]
}

En la cuenta A, he definido un rol que permite al usuario root asumir el rol. Vamos a llamarlo Rol-A

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:root"
     },
    "Action": "sts:AssumeRole"
  }]
}

El rol A tiene la siguiente política adjunta

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::****:role/RoleB",
            "Effect": "Allow"
       }]
 }

Como usuario en la cuenta A, asumí el Rol-A. Ahora, usando esta credencial temporal, quiero asumir el Rol B y acceder al recurso propiedad de la cuenta B. Tengo el siguiente código

client = boto3.client('sts')

firewall_role_object = client.assume_role(
    RoleArn=INTERMEDIARY_IAM_ROLE_ARN,
    RoleSessionName=str("default"),
    DurationSeconds=3600)

firewall_credentials = firewall_role_object['Credentials']

firewall_client = boto3.client(
    'sts',
    aws_access_key_id=firewall_credentials['AccessKeyId'],
    aws_secret_access_key=firewall_credentials['SecretAccessKey'],
    aws_session_token=firewall_credentials['SessionToken'], )

optimizely_role_object = firewall_client.assume_role(
    RoleArn=CUSTOMER_IAM_ROLE_ARN,
    RoleSessionName=str("default"),
    DurationSeconds=3600)

print(optimizely_role_object['Credentials'])

Este código funciona para el conjunto de roles que obtuve de mi cliente, pero no funciona para los roles que definí entre dos de la cuenta de AWS a la que tengo acceso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta