aws Iam принимает и получает временные учетные данные с помощью boto3, не возвращает сервисы в get_service_graph

#amazon-web-services #aws-lambda #boto3 #aws-xray #assume-role

Вопрос:

 def assume_role(self,account_id, role_name, duration, external_id):
    role_arn = "arn:aws:iam::"   account_id   ":role/"   role_name
    role_session_name = "AssumeRoleSession"
    client = boto3.client('sts', 'us-east-2')
    response = client.assume_role(RoleArn=role_arn,
            RoleSessionName=role_session_name,
            DurationSeconds=duration,
            ExternalId=external_id
            )
    tmp_credentials = {
            'access-key-id': response['Credentials']['AccessKeyId'],
            'secret-access-key': response['Credentials']['SecretAccessKey'],
            'session-token':response['Credentials']['SessionToken']
            }
    return tmp_credentials
def create_clients(self, account_credentials):
    account_id = account.get('account-id')
    role_name = account.get('role-name')
    duration = 3600
    external_id = account.get('external-id')
    region_name= account.get('region-name')
    tmp_credentials = self.assume_role(account_id,role_name,duration,external_id)
    xray_client = boto3.client('xray',
                                  aws_access_key_id=tmp_credentials.get('access-key-id'),
                                  aws_secret_access_key=tmp_credentials.get('secret-access-key'),
                                  aws_session_token=tmp_credentials.get('session-token'),
                                  region_name=region_name)
 

Теперь я знаю:

 response = xray_client.get_service_graph(StartTime=start_time, 
                                                    EndTime=end_time)    
print(f"response: {response}")
 

Ответ, который я получаю, неправильный, это

 response: {'ResponseMetadata': {'RequestId': '0fa2d89c-4adf-4816-b86e-240cff3fdad6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 15 May 2021 12:54:50 GMT', 'content-type': 'application/json', 'content-length': '97', 'connection': 'keep-alive', 'x-amzn-requestid': '0fa2d89c-4adf-4816-b86e-240cff3fdad6'}, 'RetryAttempts': 0}, 'Services': [], 'ContainsOldGroupVersions': False}
 

См.Значение служб в ответе-пустой список [], В этом и заключается проблема. Если я получу доступ к xray напрямую,используя учетные записи permanent access_key_id и secret_key_id вместо tmp_credentials (идентификатор,идентификатор, sessionToken), я получу несколько служб в списке служб.
ссылки, которым я следовал, являются:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/xray.html#XRay.Client.get_service_graph

https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html

Кроме того, Роль правильно настроена в целевой учетной записи AWS с помощью политики awsXrayFullAccess и множества других политик.