Name

global.CloudServiceAccountInfoUtil

Description

Get Cloud Service Accounts and create xml.

Script

var CloudServiceAccountInfoUtil = Class.create();
CloudServiceAccountInfoUtil.prototype = {
  batchSize: "",
  initialize: function() {
  },
  
  getCloudServiceAccountInfoXML: function () {
  	
      /* The default value of glide.db.max_view_records system property is 10000. If it is less than 10000, then the batch size is set to
      the property's value. If the property is set to a value more than 10000 or if it is not set to any value, then the batch size would be 10000 */
      var dbMaxRec = parseInt(gs.getProperty("glide.db.max_view_records", 10000));
      this.batchSize = dbMaxRec < 10000 ? dbMaxRec : 10000;

      var count = 0;
      var dbViewGR = new GlideRecord("cloud_service_account_view");
  	
  	var xmlDoc = GlideXMLUtil.newDocument("cloudServiceAccounts");
      var root = xmlDoc.getDocumentElement();

      // // If view tables not present (Discovery Plugin is not enabled), just return an empty XML document
      if(!dbViewGR.isValid())
  		return xmlDoc;

  	dbViewGR.addNotNullQuery("sa_account_id");
      dbViewGR.orderBy("sys_created_on");
      dbViewGR.chooseWindow(0, this.batchSize);
      dbViewGR.query();

      var hasNext = dbViewGR.next();

      while (hasNext) {

          var accountElem = GlideXMLUtil.newElement(root, "cloudServiceAccount");

          // Service Account Id
          var accountId = dbViewGR.getValue("sa_account_id");
          if (!gs.nil(accountId)) {
              accountElem.setAttribute("account_id", accountId);

              // Name of Service Account
              var accountName = dbViewGR.getValue("sa_name");
              if (!accountName)
                  accountElem.setAttribute("name", "");
              else
                  accountElem.setAttribute("name", accountName);

              // Credential Sys Id
              var credentialSysId = dbViewGR.getValue("sa_discovery_credentials");
              if (!credentialSysId)
                  accountElem.setAttribute("credential_sys_id", "");
              else
                  accountElem.setAttribute("credential_sys_id", credentialSysId);

              // Data Center Type / Provider
              var datacenterType = dbViewGR.getValue("sa_datacenter_type");
              if (!datacenterType)
                  accountElem.setAttribute("datacenter_type", "");
              else
                  accountElem.setAttribute("datacenter_type", datacenterType);

              // Data Center URL
              var datacenterUrl = dbViewGR.getValue("sa_datacenter_url");
              if (!datacenterUrl)
                  accountElem.setAttribute("datacenter_url", "");
              else
                  accountElem.setAttribute("datacenter_url", datacenterUrl);

              // Parent Account Id
              var parentAccountId = dbViewGR.getValue("parent_account_id");
              if (!parentAccountId)
                  accountElem.setAttribute("parent_account_id", "");
              else
                  accountElem.setAttribute("parent_account_id", parentAccountId);

              // Accessor Account Id
              var accessorAccountId = dbViewGR.getValue("accessor_account_id");
              if (!accessorAccountId)
                  accountElem.setAttribute("accessor_account_id", "");
              else
                  accountElem.setAttribute("accessor_account_id", accessorAccountId);

              // Is Master Account?
              var isMasterAccount = dbViewGR.getValue("sa_is_master_account");
              if (isMasterAccount == 1)
                  accountElem.setAttribute("is_master_account", "true");
              else
                  accountElem.setAttribute("is_master_account", "false");


              this.packageAwsOrgAssumeRoleParams(dbViewGR, accountElem);

              this.packageAwsCrossAccountAssumeRoleParams(dbViewGR, accountElem);
          }

          count++;
          hasNext = dbViewGR.next();
          if (!hasNext && (count % this.batchSize == 0)) {
              dbViewGR.chooseWindow(count, count + this.batchSize);
              dbViewGR.query();
              hasNext = dbViewGR.next();
          }
      }
  	
  	return xmlDoc;
  },

  /*****************************************************************************************************************/
  /**
   * Helper method to package AWS Org Assume Role Params
   */
  packageAwsOrgAssumeRoleParams: function (dbViewGR, accountElem) {

     var valid = dbViewGR.getValue("awsorgrole_cloud_service_account");

      if (!valid) return;

      var paramsElem = GlideXMLUtil.newElement(accountElem, "awsOrgAssumeRoleParams");

      // access role name
      var accessRoleName = dbViewGR.getValue("awsorgrole_access_role_name");
      if (!accessRoleName)
          paramsElem.setAttribute("access_role_name", "");
      else
          paramsElem.setAttribute("access_role_name", accessRoleName);

      // role session name
      var roleSessionName = dbViewGR.getValue("awsorgrole_role_session_name");
      if (!roleSessionName)
          paramsElem.setAttribute("role_session_name", "");
      else
          paramsElem.setAttribute("role_session_name", roleSessionName);

      // credential TTL seconds - Okay to treat this as a string for marshalling purposes
      var credentialTtlSeconds = dbViewGR.getValue("awsorgrole_credential_ttl_seconds");
      if (!credentialTtlSeconds)
          paramsElem.setAttribute("credential_ttl_seconds", "");
      else
          paramsElem.setAttribute("credential_ttl_seconds", credentialTtlSeconds);


      // external ID
      var externalId = dbViewGR.getValue("awsorgrole_external_id");
      if (!externalId)
          paramsElem.setAttribute("external_id", "");
      else
          paramsElem.setAttribute("external_id", externalId);


      // MFA Serial Number
      var mfaSerialNumber = dbViewGR.getValue("awsorgrole_mfa_serial_number");
      if (!mfaSerialNumber)
          paramsElem.setAttribute("mfa_serial_number", "");
      else
          paramsElem.setAttribute("mfa_serial_number", mfaSerialNumber);


      // MFA Token Code
      var mfaTokenCode = dbViewGR.getValue("awsorgrole_mfa_token_code");
      if (!mfaSerialNumber)
          paramsElem.setAttribute("mfa_token_code", "");
      else
          paramsElem.setAttribute("mfa_token_code", mfaTokenCode);


      // Last, but not least - put this in as an element at the end:
      // session policy as an element because it might be too big for an attribute
      var policyElem = GlideXMLUtil.newElement(paramsElem, "sessionPolicy");
      var sessionPolicy = dbViewGR.getValue("awsorgrole_session_policy");
      if (sessionPolicy)
          policyElem.setTextContent(sessionPolicy);
  },

  /*****************************************************************************************************************/
  /**
   * Helper method to package AWS Cross Account Assume Role Params
   */
  packageAwsCrossAccountAssumeRoleParams: function (dbViewGR, accountElem) {

      var valid = dbViewGR.getValue("awscrossrole_cloud_service_account");

      if (!valid) return;
  	
  	var paramsElem = GlideXMLUtil.newElement(accountElem, "awsCrossAssumeRoleParams");

      // access role name
      var accessRoleName = dbViewGR.getValue("awscrossrole_access_role_name");
      if (!accessRoleName)
          paramsElem.setAttribute("access_role_name", "");
      else
          paramsElem.setAttribute("access_role_name", accessRoleName);

      // role session name
      var roleSessionName = dbViewGR.getValue("awscrossrole_role_session_name");
      if (!roleSessionName)
          paramsElem.setAttribute("role_session_name", "");
      else
          paramsElem.setAttribute("role_session_name", roleSessionName);

      // credential TTL seconds - Okay to treat this as a string for marshalling purposes
      var credentialTtlSeconds = dbViewGR.getValue("awscrossrole_credential_ttl_seconds");
      if (!credentialTtlSeconds)
          paramsElem.setAttribute("credential_ttl_seconds", "");
      else
          paramsElem.setAttribute("credential_ttl_seconds", credentialTtlSeconds);


      // external ID
      var externalId = dbViewGR.getValue("awscrossrole_external_id");
      if (!externalId)
          paramsElem.setAttribute("external_id", "");
      else
          paramsElem.setAttribute("external_id", externalId);


      // MFA Serial Number
      var mfaSerialNumber = dbViewGR.getValue("awscrossrole_mfa_serial_number");
      if (!mfaSerialNumber)
          paramsElem.setAttribute("mfa_serial_number", "");
      else
          paramsElem.setAttribute("mfa_serial_number", mfaSerialNumber);


      // MFA Token Code
      var mfaTokenCode = dbViewGR.getValue("awscrossrole_mfa_token_code");
      if (!mfaSerialNumber)
          paramsElem.setAttribute("mfa_token_code", "");
      else
          paramsElem.setAttribute("mfa_token_code", mfaTokenCode);


      // Last, but not least - put this in as an element at the end:
      // session policy as an element because it might be too big for an attribute
      var policyElem = GlideXMLUtil.newElement(paramsElem, "sessionPolicy");
      var sessionPolicy = dbViewGR.getValue("awscrossrole_session_policy");
      if (sessionPolicy)
          policyElem.setTextContent(sessionPolicy);

  },
  
  type: "CloudServiceAccountInfoUtil"
};

Sys ID

392afd336b783010da1e64ed1e44afb9

Offical Documentation

Official Docs: