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 Answers
2
Accepted Answer

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
EXPERT
answered 10 months ago
profile picture
EXPERT
reviewed 10 months ago
profile picture
EXPERT
reviewed 10 months ago
profile picture
EXPERT
reviewed 10 months ago
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
answered 10 months ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions