Missing required parameter in input: "InstanceArn" in boto3 code

0

Hi All, I am trying to list all permission sets from the Identity Center from another AWS account in lambda by assuming a role from the Identity Center's AWS Account.

    try:
        instance_arn = "arn:aws:sso:::instance/ssoins-IdentityID"
        print("Inside get_permissionsetlist *************")
        print("InstanceArn",instance_arn)
        client = boto3.client('sso-admin',aws_access_key_id=AccessKeyId, aws_secret_access_key=SecretAccessKey, aws_session_token=SessionToken)
        response = client.list_permission_sets(InstanceArn=instance_arn)
        print("response: ",response)
        result = response['PermissionSets']
        while 'NextToken' in response:
            response = client.list_permission_sets(NextToken=response["NextToken"])
            result.extent(response['PermissionSets'])
        return result
    except Exception as err:
        raise err

I have a simple code where it is trying to list all permission sets. The printing response shows an expected response but the loop ends in error. The error makes no sense since I already pass InstanceArn in the code.

{
  "errorMessage": "Parameter validation failed:\nMissing required parameter in input: \"InstanceArn\"",
  "errorType": "ParamValidationError",
  "requestId": "50e7cfba-50e7cfba-92cc-50e7cfba",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 13, in lambda_handler\n    listpermissionsets = get_permissionsetlist(session['AccessKeyId'],session['SecretAccessKey'],session['SessionToken'])\n",
    "  File \"/var/task/lambda_function.py\", line 76, in get_permissionsetlist\n    raise err\n",
    "  File \"/var/task/lambda_function.py\", line 72, in get_permissionsetlist\n    response = client.list_permission_sets(NextToken=response[\"NextToken\"])\n",
    "  File \"/var/runtime/botocore/client.py\", line 530, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n",
    "  File \"/var/runtime/botocore/client.py\", line 919, in _make_api_call\n    request_dict = self._convert_to_request_dict(\n",
    "  File \"/var/runtime/botocore/client.py\", line 990, in _convert_to_request_dict\n    request_dict = self._serializer.serialize_to_request(\n",
    "  File \"/var/runtime/botocore/validate.py\", line 381, in serialize_to_request\n    raise ParamValidationError(report=report.generate_report())\n"
  ]
}

Any idea what could be the reason? I appreciate your help.

2 Antworten
2
Akzeptierte Antwort

Hi,

According to Boto3 documentation, the InstanceArn parameter is required, but you are not specifying it in the loop execution.

response = client.list_permission_sets(NextToken=response["NextToken"])

Could you check if adding it solves your problem?

response = client.list_permission_sets(InstanceArn=args['instance_arn'],NextToken=response["NextToken"])
profile picture
EXPERTE
beantwortet vor einem Jahr
profile picture
EXPERTE
überprüft vor einem Jahr
profile picture
EXPERTE
überprüft vor einem Jahr
profile picture
EXPERTE
überprüft vor einem Jahr
0

Thanks @mikel

I have updated the code and tested it. Looks good now.

    try:
        instance_arn = "arn:aws:sso:::instance/ssoins-IdentityID"
        print("InstanceArn",instance_arn)
        client = boto3.client('sso-admin',aws_access_key_id=AccessKeyId, aws_secret_access_key=SecretAccessKey, aws_session_token=SessionToken)
        response = client.list_permission_sets(InstanceArn=instance_arn)
        print("response: ",response)
        result = response['PermissionSets']
        while 'NextToken' in response:
            response = client.list_permission_sets(InstanceArn=instance_arn,NextToken=response["NextToken"])
            result.extent(response['PermissionSets'])
        return result
    except Exception as err:
        raise err
beantwortet vor einem Jahr

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen